ip_output() using varargs always struck me as bizarre, esp since it's only
authorhenning <henning@openbsd.org>
Mon, 21 Apr 2014 12:22:25 +0000 (12:22 +0000)
committerhenning <henning@openbsd.org>
Mon, 21 Apr 2014 12:22:25 +0000 (12:22 +0000)
ever used to pass on uint32 (for ipsec). stop that madness and just pass
the uint32, 0 in all cases but the two that pass the ipsec flowinfo.
ok deraadt reyk guenther

21 files changed:
sys/net/if_gif.c
sys/net/if_gre.c
sys/net/if_pflow.c
sys/net/if_pfsync.c
sys/net/if_vxlan.c
sys/net/pf.c
sys/net/pipex.c
sys/netinet/igmp.c
sys/netinet/ip_carp.c
sys/netinet/ip_divert.c
sys/netinet/ip_icmp.c
sys/netinet/ip_input.c
sys/netinet/ip_mroute.c
sys/netinet/ip_output.c
sys/netinet/ip_var.h
sys/netinet/ipsec_output.c
sys/netinet/raw_ip.c
sys/netinet/tcp_input.c
sys/netinet/tcp_output.c
sys/netinet/tcp_subr.c
sys/netinet/udp_usrreq.c

index 1b7d667..ec0ba13 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_gif.c,v 1.65 2014/04/21 11:10:54 henning Exp $     */
+/*     $OpenBSD: if_gif.c,v 1.66 2014/04/21 12:22:25 henning Exp $     */
 /*     $KAME: if_gif.c,v 1.43 2001/02/20 08:51:07 itojun Exp $ */
 
 /*
@@ -261,7 +261,7 @@ gif_start(struct ifnet *ifp)
                switch (sc->gif_psrc->sa_family) {
 #ifdef INET
                case AF_INET:
-                       ip_output(m, NULL, NULL, 0, NULL, NULL);
+                       ip_output(m, NULL, NULL, 0, NULL, NULL, 0);
                        break;
 #endif
 #ifdef INET6
index ceba594..e423910 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: if_gre.c,v 1.66 2014/04/21 11:10:54 henning Exp $ */
+/*      $OpenBSD: if_gre.c,v 1.67 2014/04/21 12:22:25 henning Exp $ */
 /*     $NetBSD: if_gre.c,v 1.9 1999/10/25 19:18:11 drochner Exp $ */
 
 /*
@@ -430,7 +430,7 @@ gre_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
 #endif
 
        /* Send it off */
-       error = ip_output(m, NULL, &sc->route, 0, NULL, NULL);
+       error = ip_output(m, NULL, &sc->route, 0, NULL, NULL, 0);
   end:
        if (error)
                ifp->if_oerrors++;
index d761869..393316a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_pflow.c,v 1.42 2014/04/14 09:06:42 mpi Exp $       */
+/*     $OpenBSD: if_pflow.c,v 1.43 2014/04/21 12:22:25 henning Exp $   */
 
 /*
  * Copyright (c) 2011 Florian Obser <florian@narrans.de>
@@ -1124,7 +1124,8 @@ pflow_sendout_mbuf(struct pflow_softc *sc, struct mbuf *m)
        sc->sc_if.if_opackets++;
        sc->sc_if.if_obytes += m->m_pkthdr.len;
 
-       if ((err = ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL))) {
+       if ((err = ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL,
+           0))) {
                pflowstats.pflow_oerrors++;
                sc->sc_if.if_oerrors++;
        }
index 05a75f9..0d11d5a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_pfsync.c,v 1.205 2014/04/14 09:06:42 mpi Exp $     */
+/*     $OpenBSD: if_pfsync.c,v 1.206 2014/04/21 12:22:25 henning Exp $ */
 
 /*
  * Copyright (c) 2002 Michael Shalayeff
@@ -1685,7 +1685,7 @@ pfsync_sendout(void)
 
        m->m_pkthdr.ph_rtableid = sc->sc_if.if_rdomain;
 
-       if (ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL) == 0)
+       if (ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL, 0) == 0)
                pfsyncstats.pfsyncs_opackets++;
        else
                pfsyncstats.pfsyncs_oerrors++;
@@ -1798,8 +1798,8 @@ pfsync_undefer(struct pfsync_deferral *pd, int drop)
                        switch (pd->pd_st->key[PF_SK_WIRE]->af) {
 #ifdef INET
                        case AF_INET:
-                               ip_output(pd->pd_m, NULL, NULL, 0,
-                                   NULL, NULL);
+                               ip_output(pd->pd_m, NULL, NULL, 0, NULL, NULL,
+                                   0);
                                break;
 #endif /* INET */
 #ifdef INET6
index 860b688..ee357be 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_vxlan.c,v 1.12 2014/04/14 09:06:42 mpi Exp $       */
+/*     $OpenBSD: if_vxlan.c,v 1.13 2014/04/21 12:22:25 henning Exp $   */
 
 /*
  * Copyright (c) 2013 Reyk Floeter <reyk@openbsd.org>
@@ -636,7 +636,7 @@ vxlan_output(struct ifnet *ifp, struct mbuf *m)
 
 #ifdef INET
        if ((error =
-           ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL))) {
+           ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL, 0))) {
                ifp->if_oerrors++;
        }
 #endif
index 59ee0e8..ad4380f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf.c,v 1.874 2014/04/21 11:10:54 henning Exp $ */
+/*     $OpenBSD: pf.c,v 1.875 2014/04/21 12:22:25 henning Exp $ */
 
 /*
  * Copyright (c) 2001 Daniel Hartmeier
@@ -2426,7 +2426,7 @@ pf_send_tcp(const struct pf_rule *r, sa_family_t af,
 #ifdef INET
        case AF_INET:
                if (eh == NULL) {
-                       ip_output(m, NULL, NULL, 0, NULL, NULL);
+                       ip_output(m, NULL, NULL, 0, NULL, NULL, 0);
                } else {
                        struct route             ro;
                        struct rtentry           rt;
@@ -2443,7 +2443,7 @@ pf_send_tcp(const struct pf_rule *r, sa_family_t af,
                        memcpy(e->ether_shost, eh->ether_dhost, ETHER_ADDR_LEN);
                        memcpy(e->ether_dhost, eh->ether_shost, ETHER_ADDR_LEN);
                        e->ether_type = eh->ether_type;
-                       ip_output(m, NULL, &ro, IP_ROUTETOETHER, NULL, NULL);
+                       ip_output(m, NULL, &ro, IP_ROUTETOETHER, NULL, NULL, 0);
                }
                break;
 #endif /* INET */
index 06e8e6d..407f85a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pipex.c,v 1.49 2014/04/18 22:23:50 claudio Exp $      */
+/*     $OpenBSD: pipex.c,v 1.50 2014/04/21 12:22:25 henning Exp $      */
 
 /*-
  * Copyright (c) 2009 Internet Initiative Japan Inc.
@@ -1558,7 +1558,7 @@ pipex_pptp_output(struct mbuf *m0, struct pipex_session *session,
        gre->flags = htons(gre->flags);
 
        m0->m_pkthdr.rcvif = session->pipex_iface->ifnet_this;
-       if (ip_output(m0, NULL, NULL, 0, NULL, NULL) != 0) {
+       if (ip_output(m0, NULL, NULL, 0, NULL, NULL, 0) != 0) {
                PIPEX_DBG((session, LOG_DEBUG, "ip_output failed."));
                goto drop;
        }
@@ -1996,7 +1996,7 @@ pipex_l2tp_output(struct mbuf *m0, struct pipex_session *session)
                ip->ip_ttl = MAXTTL;
                ip->ip_tos = 0;
 
-               if (ip_output(m0, NULL, NULL, IP_IPSECFLOW, NULL, NULL,
+               if (ip_output(m0, NULL, NULL, 0, NULL, NULL,
                    session->proto.l2tp.ipsecflowinfo) != 0) {
                        PIPEX_DBG((session, LOG_DEBUG, "ip_output failed."));
                        goto drop;
index 0dc9d63..5c53f55 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: igmp.c,v 1.38 2014/04/21 11:10:54 henning Exp $       */
+/*     $OpenBSD: igmp.c,v 1.39 2014/04/21 12:22:26 henning Exp $       */
 /*     $NetBSD: igmp.c,v 1.15 1996/02/13 23:41:25 christos Exp $       */
 
 /*
@@ -634,7 +634,7 @@ igmp_sendpkt(struct in_multi *inm, int type, in_addr_t addr)
        imo.imo_multicast_loop = 0;
 #endif /* MROUTING */
 
-       ip_output(m, NULL, NULL, IP_MULTICASTOPTS, &imo, NULL);
+       ip_output(m, NULL, NULL, IP_MULTICASTOPTS, &imo, NULL, 0);
 
        ++igmpstat.igps_snd_reports;
 }
index 9228d89..8b780aa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_carp.c,v 1.227 2014/04/20 14:54:39 henning Exp $   */
+/*     $OpenBSD: ip_carp.c,v 1.228 2014/04/21 12:22:26 henning Exp $   */
 
 /*
  * Copyright (c) 2002 Michael Shalayeff. All rights reserved.
@@ -1175,7 +1175,7 @@ carp_send_ad(void *v)
                carpstats.carps_opackets++;
 
                error = ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo,
-                   NULL);
+                   NULL, 0);
                if (error) {
                        if (error == ENOBUFS)
                                carpstats.carps_onomem++;
index 4a1ab47..31ac40e 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ip_divert.c,v 1.20 2014/04/14 09:06:42 mpi Exp $ */
+/*      $OpenBSD: ip_divert.c,v 1.21 2014/04/21 12:22:26 henning Exp $ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -181,7 +181,7 @@ divert_output(struct mbuf *m, ...)
                splx(s);
        } else {
                error = ip_output(m, NULL, &inp->inp_route,
-                   IP_ALLOWBROADCAST | IP_RAWOUTPUT, NULL, NULL);
+                   IP_ALLOWBROADCAST | IP_RAWOUTPUT, NULL, NULL, 0);
                if (error == EACCES)    /* translate pf(4) error for userland */
                        error = EHOSTUNREACH;
        }
index 478bcdd..e00a46a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_icmp.c,v 1.120 2014/04/21 11:10:54 henning Exp $   */
+/*     $OpenBSD: ip_icmp.c,v 1.121 2014/04/21 12:22:26 henning Exp $   */
 /*     $NetBSD: ip_icmp.c,v 1.19 1996/02/13 23:42:22 christos Exp $    */
 
 /*
@@ -844,7 +844,7 @@ icmp_send(struct mbuf *m, struct mbuf *opts)
                printf("icmp_send dst %s src %s\n", dst, src);
        }
 #endif
-       ip_output(m, opts, NULL, 0, NULL, NULL);
+       ip_output(m, opts, NULL, 0, NULL, NULL, 0);
 }
 
 n_time
index b22fd7d..3570648 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_input.c,v 1.230 2014/04/21 11:10:54 henning Exp $  */
+/*     $OpenBSD: ip_input.c,v 1.231 2014/04/21 12:22:26 henning Exp $  */
 /*     $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $   */
 
 /*
@@ -1474,7 +1474,7 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, int srcrt)
 
        error = ip_output(m, NULL, &ipforward_rt,
            (IP_FORWARDING | (ip_directedbcast ? IP_ALLOWBROADCAST : 0)),
-           NULL, NULL);
+           NULL, NULL, 0);
        if (error)
                ipstat.ips_cantforward++;
        else {
index 2e4a30a..d7afaf8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_mroute.c,v 1.65 2014/04/21 11:10:54 henning Exp $  */
+/*     $OpenBSD: ip_mroute.c,v 1.66 2014/04/21 12:22:26 henning Exp $  */
 /*     $NetBSD: ip_mroute.c,v 1.85 2004/04/26 01:31:57 matt Exp $      */
 
 /*
@@ -1732,7 +1732,8 @@ send_packet(struct vif *vifp, struct mbuf *m)
 
        if (vifp->v_flags & VIFF_TUNNEL) {
                /* If tunnel options */
-               ip_output(m, NULL, &vifp->v_route, IP_FORWARDING, NULL, NULL);
+               ip_output(m, NULL, &vifp->v_route, IP_FORWARDING, NULL, NULL,
+                   0);
        } else {
                /*
                 * if physical interface option, extract the options
@@ -1745,7 +1746,7 @@ send_packet(struct vif *vifp, struct mbuf *m)
                imo.imo_multicast_loop = 1;
 
                error = ip_output(m, NULL, NULL,
-                   IP_FORWARDING | IP_MULTICASTOPTS, &imo, NULL);
+                   IP_FORWARDING | IP_MULTICASTOPTS, &imo, NULL, 0);
 
                if (mrtdebug & DEBUG_XMIT)
                        log(LOG_DEBUG, "phyint_send on vif %ld err %d\n",
index 1b63a28..a5429ea 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_output.c,v 1.262 2014/04/20 09:38:19 henning Exp $ */
+/*     $OpenBSD: ip_output.c,v 1.263 2014/04/21 12:22:26 henning Exp $ */
 /*     $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $  */
 
 /*
@@ -86,7 +86,7 @@ void in_delayed_cksum(struct mbuf *);
  */
 int
 ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, int flags,
-    struct ip_moptions *imo, struct inpcb *inp, ...)
+    struct ip_moptions *imo, struct inpcb *inp, u_int32_t ipsecflowinfo)
 {
        struct ip *ip;
        struct ifnet *ifp;
@@ -106,7 +106,6 @@ ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, int flags,
        struct tdb_ident *tdbi;
 
        struct tdb *tdb;
-       u_int32_t ipsecflowinfo = 0;
 #if NPF > 0
        struct ifnet *encif;
 #endif
@@ -115,12 +114,6 @@ ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, int flags,
 #ifdef IPSEC
        if (inp && (inp->inp_flags & INP_IPV6) != 0)
                panic("ip_output: IPv6 pcb is passed");
-       if (flags & IP_IPSECFLOW) {
-               va_list ap;
-               va_start(ap, inp);
-               ipsecflowinfo = va_arg(ap, u_int32_t);
-               va_end(ap);
-       }
 #endif /* IPSEC */
 
 #ifdef DIAGNOSTIC
index 518eaa9..5ffb08a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_var.h,v 1.55 2014/04/07 10:04:17 mpi Exp $ */
+/*     $OpenBSD: ip_var.h,v 1.56 2014/04/21 12:22:26 henning Exp $     */
 /*     $NetBSD: ip_var.h,v 1.16 1996/02/13 23:43:20 christos Exp $     */
 
 /*
@@ -137,13 +137,12 @@ struct ipq {
        struct    in_addr ipq_src, ipq_dst;
 };
 
-/* flags passed to ip_output as last parameter */
+/* flags passed to ip_output */
 #define        IP_FORWARDING           0x1             /* most of ip header exists */
 #define        IP_RAWOUTPUT            0x2             /* raw ip header exists */
 #define        IP_ALLOWBROADCAST       SO_BROADCAST    /* can send broadcast packets */
 #define        IP_MTUDISC              0x0800          /* pmtu discovery, set DF */
 #define IP_ROUTETOETHER                0x1000          /* ether addresses given */
-#define IP_IPSECFLOW           0x2000          /* IPsec flow info */
 
 extern struct ipstat ipstat;
 extern LIST_HEAD(ipqhead, ipq) ipq;    /* ip reass. queue */
@@ -185,7 +184,7 @@ void         ip_init(void);
 int     ip_mforward(struct mbuf *, struct ifnet *);
 int     ip_optcopy(struct ip *, struct ip *);
 int     ip_output(struct mbuf *, struct mbuf *, struct route *, int,
-           struct ip_moptions *, struct inpcb *, ...);
+           struct ip_moptions *, struct inpcb *, u_int32_t);
 int     ip_pcbopts(struct mbuf **, struct mbuf *);
 struct mbuf *
         ip_reass(struct ipqent *, struct ipq *);
index 5467e4d..ca1c1bf 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipsec_output.c,v 1.51 2014/04/21 11:10:54 henning Exp $ */
+/*     $OpenBSD: ipsec_output.c,v 1.52 2014/04/21 12:22:26 henning Exp $ */
 /*
  * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
  *
@@ -511,7 +511,7 @@ ipsp_process_done(struct mbuf *m, struct tdb *tdb)
        switch (tdb->tdb_dst.sa.sa_family) {
 #ifdef INET
        case AF_INET:
-               return (ip_output(m, NULL, NULL, IP_RAWOUTPUT, NULL, NULL));
+               return (ip_output(m, NULL, NULL, IP_RAWOUTPUT, NULL, NULL, 0));
 #endif /* INET */
 
 #ifdef INET6
index 6e2de4c..a939901 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: raw_ip.c,v 1.71 2014/04/14 09:06:42 mpi Exp $ */
+/*     $OpenBSD: raw_ip.c,v 1.72 2014/04/21 12:22:26 henning Exp $     */
 /*     $NetBSD: raw_ip.c,v 1.25 1996/02/18 18:58:33 christos Exp $     */
 
 /*
@@ -278,7 +278,7 @@ rip_output(struct mbuf *m, ...)
        m->m_pkthdr.ph_rtableid = inp->inp_rtableid;
 
        error = ip_output(m, inp->inp_options, &inp->inp_route, flags,
-           inp->inp_moptions, inp);
+           inp->inp_moptions, inp, 0);
        if (error == EACCES)    /* translate pf(4) error for userland */
                error = EHOSTUNREACH;
        return (error);
index 23208bf..14fc254 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_input.c,v 1.274 2014/04/21 11:10:54 henning Exp $ */
+/*     $OpenBSD: tcp_input.c,v 1.275 2014/04/21 12:22:26 henning Exp $ */
 /*     $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $  */
 
 /*
@@ -4414,7 +4414,7 @@ syn_cache_respond(struct syn_cache *sc, struct mbuf *m)
 #ifdef INET
        case AF_INET:
                error = ip_output(m, sc->sc_ipopts, ro,
-                   (ip_mtudisc ? IP_MTUDISC : 0),  NULL, inp);
+                   (ip_mtudisc ? IP_MTUDISC : 0),  NULL, inp, 0);
                break;
 #endif
 #ifdef INET6
index d18c227..21eb847 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_output.c,v 1.105 2014/04/14 09:06:42 mpi Exp $    */
+/*     $OpenBSD: tcp_output.c,v 1.106 2014/04/21 12:22:26 henning Exp $        */
 /*     $NetBSD: tcp_output.c,v 1.16 1997/06/03 16:17:09 kml Exp $      */
 
 /*
@@ -1076,7 +1076,7 @@ send:
                }
                error = ip_output(m, tp->t_inpcb->inp_options,
                        &tp->t_inpcb->inp_route,
-                       (ip_mtudisc ? IP_MTUDISC : 0), NULL, tp->t_inpcb);
+                       (ip_mtudisc ? IP_MTUDISC : 0), NULL, tp->t_inpcb, 0);
                break;
 #endif /* INET */
 #ifdef INET6
index aff8b95..e0e4773 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_subr.c,v 1.128 2014/04/21 11:10:54 henning Exp $  */
+/*     $OpenBSD: tcp_subr.c,v 1.129 2014/04/21 12:22:26 henning Exp $  */
 /*     $NetBSD: tcp_subr.c,v 1.22 1996/02/13 23:44:00 christos Exp $   */
 
 /*
@@ -421,7 +421,7 @@ tcp_respond(struct tcpcb *tp, caddr_t template, struct tcphdr *th0,
                ip->ip_ttl = ip_defttl;
                ip->ip_tos = 0;
                ip_output(m, NULL, ro, ip_mtudisc ? IP_MTUDISC : 0,
-                   NULL, tp ? tp->t_inpcb : NULL);
+                   NULL, tp ? tp->t_inpcb : NULL, 0);
        }
 }
 
index 8fc4507..82a3bb0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: udp_usrreq.c,v 1.182 2014/04/18 10:48:29 jca Exp $    */
+/*     $OpenBSD: udp_usrreq.c,v 1.183 2014/04/21 12:22:26 henning Exp $        */
 /*     $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */
 
 /*
@@ -1111,8 +1111,8 @@ udp_output(struct mbuf *m, ...)
        m->m_pkthdr.ph_rtableid = inp->inp_rtableid;
 
        error = ip_output(m, inp->inp_options, &inp->inp_route,
-           (inp->inp_socket->so_options & SO_BROADCAST) | IP_IPSECFLOW,
-           inp->inp_moptions, inp, ipsecflowinfo);
+           (inp->inp_socket->so_options & SO_BROADCAST), inp->inp_moptions,
+           inp, ipsecflowinfo);
        if (error == EACCES)    /* translate pf(4) error for userland */
                error = EHOSTUNREACH;