Introduce unhandled_af() for cases where code conditionally does
authorjsg <jsg@openbsd.org>
Sun, 7 Jun 2015 12:02:28 +0000 (12:02 +0000)
committerjsg <jsg@openbsd.org>
Sun, 7 Jun 2015 12:02:28 +0000 (12:02 +0000)
something based on an address family and later assumes one of the paths
was taken.  This was initially just calls to panic until guenther
suggested a function to reduce the amount of strings needed.

This reduces the amount of noise with static analysers and acts
as a sanity check.

ok guenther@ bluhm@

sys/net/if.c
sys/net/if.h
sys/net/if_pflow.c
sys/net/pf.c
sys/net/pf_table.c
sys/netinet/tcp_input.c
sys/netinet/tcp_usrreq.c

index d047496..9965ae8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if.c,v 1.337 2015/06/03 22:01:07 mikeb Exp $  */
+/*     $OpenBSD: if.c,v 1.338 2015/06/07 12:02:28 jsg Exp $    */
 /*     $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $  */
 
 /*
@@ -2476,3 +2476,9 @@ niq_enlist(struct niqueue *niq, struct mbuf_list *ml)
 
        return (rv);
 }
+
+__dead void
+unhandled_af(int af)
+{
+       panic("unhandled af %d", af);
+}
index aebcab0..49ec165 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if.h,v 1.163 2015/05/18 13:32:28 reyk Exp $   */
+/*     $OpenBSD: if.h,v 1.164 2015/06/07 12:02:28 jsg Exp $    */
 /*     $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $  */
 
 /*
@@ -466,6 +466,7 @@ struct      ifnet *if_get(unsigned int);
 void   ifnewlladdr(struct ifnet *);
 void   if_congestion(void);
 int    if_congested(void);
+__dead void    unhandled_af(int);
 
 #endif /* _KERNEL */
 
index ac27853..6ff2ade 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_pflow.c,v 1.49 2014/12/19 17:14:39 tedu Exp $      */
+/*     $OpenBSD: if_pflow.c,v 1.50 2015/06/07 12:02:28 jsg Exp $       */
 
 /*
  * Copyright (c) 2011 Florian Obser <florian@narrans.de>
@@ -1007,8 +1007,8 @@ pflow_sendout_ipfix(struct pflow_softc *sc, sa_family_t af)
                set_length = sizeof(struct pflow_set_header)
                    + sc->sc_count6 * sizeof(struct pflow_ipfix_flow6);
                break;
-       default: /* NOTREACHED */
-               break;
+       default:
+               unhandled_af(af);
        }
 
        if (!(ifp->if_flags & IFF_RUNNING)) {
index 7f5f1ae..0fcbd5f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf.c,v 1.917 2015/06/05 13:22:34 mikeb Exp $ */
+/*     $OpenBSD: pf.c,v 1.918 2015/06/07 12:02:28 jsg Exp $ */
 
 /*
  * Copyright (c) 2001 Daniel Hartmeier
@@ -2332,6 +2332,8 @@ pf_send_tcp(const struct pf_rule *r, sa_family_t af,
                len = sizeof(struct ip6_hdr) + tlen;
                break;
 #endif /* INET6 */
+       default:
+               unhandled_af(af);
        }
 
        /* create outgoing mbuf */
@@ -4494,6 +4496,8 @@ pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state **state,
                icmptype = pd->hdr.icmp6->icmp6_type;
                break;
 #endif /* INET6 */
+       default:
+               panic("unhandled proto %d", pd->proto);
        }
 
        if (pf_icmp_mapping(pd, icmptype, &icmp_dir, &virtual_id,
@@ -4684,6 +4688,8 @@ pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state **state,
                        pd2.dst = (struct pf_addr *)&h2_6.ip6_dst;
                        break;
 #endif /* INET6 */
+               default:
+                       unhandled_af(pd->af);
                }
 
                switch (pd2.proto) {
@@ -5789,6 +5795,8 @@ pf_check_proto_cksum(struct pf_pdesc *pd, int off, int len, u_int8_t p,
                sum = in6_cksum(pd->m, p, off, len);
                break;
 #endif /* INET6 */
+       default:
+               unhandled_af(af);
        }
        if (sum) {
                switch (p) {
index 8137862..005d99f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf_table.c,v 1.108 2015/04/09 12:04:14 mikeb Exp $    */
+/*     $OpenBSD: pf_table.c,v 1.109 2015/06/07 12:02:28 jsg Exp $      */
 
 /*
  * Copyright (c) 2002 Cedric Berger
@@ -792,12 +792,17 @@ pfr_lookup_addr(struct pfr_ktable *kt, struct pfr_addr *ad, int exact)
        int                      s;
 
        bzero(&sa, sizeof(sa));
-       if (ad->pfra_af == AF_INET) {
+       switch (ad->pfra_af) {
+       case AF_INET:
                FILLIN_SIN(sa.sin, ad->pfra_ip4addr);
                head = kt->pfrkt_ip4;
-       } else if ( ad->pfra_af == AF_INET6 ) {
+               break;
+       case AF_INET6:
                FILLIN_SIN6(sa.sin6, ad->pfra_ip6addr);
                head = kt->pfrkt_ip6;
+               break;
+       default:
+               unhandled_af(ad->pfra_af);
        }
        if (ADDR_NETWORK(ad)) {
                pfr_prepare_network(&mask, ad->pfra_af, ad->pfra_net);
@@ -1042,10 +1047,16 @@ pfr_route_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke)
        int                      s;
 
        bzero(ke->pfrke_node, sizeof(ke->pfrke_node));
-       if (ke->pfrke_af == AF_INET)
+       switch (ke->pfrke_af) {
+       case AF_INET:
                head = kt->pfrkt_ip4;
-       else if (ke->pfrke_af == AF_INET6)
+               break;
+       case AF_INET6:
                head = kt->pfrkt_ip6;
+               break;
+       default:
+               unhandled_af(ke->pfrke_af);
+       }
 
        s = splsoftnet();
        if (KENTRY_NETWORK(ke)) {
@@ -1066,10 +1077,16 @@ pfr_unroute_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke)
        struct radix_node_head  *head;
        int                      s;
 
-       if (ke->pfrke_af == AF_INET)
+       switch (ke->pfrke_af) {
+       case AF_INET:
                head = kt->pfrkt_ip4;
-       else if (ke->pfrke_af == AF_INET6)
+               break;
+       case AF_INET6:
                head = kt->pfrkt_ip6;
+               break;
+       default:
+               unhandled_af(ke->pfrke_af);
+       }
 
        s = splsoftnet();
        if (KENTRY_NETWORK(ke)) {
index 6a6db0e..15e69ae 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_input.c,v 1.291 2015/06/07 01:25:27 krw Exp $     */
+/*     $OpenBSD: tcp_input.c,v 1.292 2015/06/07 12:02:28 jsg Exp $     */
 /*     $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $  */
 
 /*
@@ -3262,7 +3262,9 @@ tcp_mss_adv(struct ifnet *ifp, int af)
                        mss = IN6_LINKMTU(ifp);
                iphlen = sizeof(struct ip6_hdr);
                break;
-#endif
+#endif  
+       default:
+               unhandled_af(af);
        }
        mss = mss - iphlen - sizeof(struct tcphdr);
        return (max(mss, tcp_mssdflt));
@@ -4203,7 +4205,7 @@ syn_cache_respond(struct syn_cache *sc, struct mbuf *m)
                break;
 #endif
        default:
-               th = NULL;
+               unhandled_af(sc->sc_src.sa.sa_family);
        }
 
        th->th_seq = htonl(sc->sc_iss);
index 52c81ee..8418b99 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_usrreq.c,v 1.124 2015/06/07 01:25:27 krw Exp $    */
+/*     $OpenBSD: tcp_usrreq.c,v 1.125 2015/06/07 12:02:28 jsg Exp $    */
 /*     $NetBSD: tcp_usrreq.c,v 1.20 1996/02/13 23:44:16 christos Exp $ */
 
 /*
@@ -824,6 +824,8 @@ tcp_ident(void *oldp, size_t *oldlenp, void *newp, size_t newlen, int dodrop)
                inp = in_pcbhashlookup(&tcbtable, fin->sin_addr,
                    fin->sin_port, lin->sin_addr, lin->sin_port, tir.rdomain);
                break;
+       default:
+               unhandled_af(tir.faddr.ss_family);
        }
 
        if (dodrop) {