Hi,

Creating a cloned interface could return ENOMEM during a temporary
memory shortage.  As it is invoked from a system call, it should
not fail and wait instead.

ok?

bluhm

Index: net/if_bridge.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.299
diff -u -p -r1.299 if_bridge.c
--- net/if_bridge.c     20 Nov 2017 10:17:40 -0000      1.299
+++ net/if_bridge.c     9 Jan 2018 00:13:05 -0000
@@ -156,10 +156,7 @@ bridge_clone_create(struct if_clone *ifc
        struct ifnet *ifp;
        int i;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (!sc)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        sc->sc_stp = bstp_create(&sc->sc_if);
        if (!sc->sc_stp) {
                free(sc, M_DEVBUF, sizeof *sc);
Index: net/if_etherip.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_etherip.c,v
retrieving revision 1.28
diff -u -p -r1.28 if_etherip.c
--- net/if_etherip.c    20 Nov 2017 10:35:24 -0000      1.28
+++ net/if_etherip.c    9 Jan 2018 00:13:21 -0000
@@ -99,9 +99,7 @@ etherip_clone_create(struct if_clone *if
        struct ifnet *ifp;
        struct etherip_softc *sc;
 
-       if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return ENOMEM;
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        ifp = &sc->sc_ac.ac_if;
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "etherip%d", unit);
        ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
Index: net/if_gif.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_gif.c,v
retrieving revision 1.105
diff -u -p -r1.105 if_gif.c
--- net/if_gif.c        20 Nov 2017 10:35:24 -0000      1.105
+++ net/if_gif.c        9 Jan 2018 00:13:32 -0000
@@ -107,10 +107,7 @@ gif_clone_create(struct if_clone *ifc, i
 {
        struct gif_softc *sc;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (!sc)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        snprintf(sc->gif_if.if_xname, sizeof sc->gif_if.if_xname,
             "%s%d", ifc->ifc_name, unit);
        sc->gif_if.if_mtu    = GIF_MTU;
Index: net/if_gre.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_gre.c,v
retrieving revision 1.88
diff -u -p -r1.88 if_gre.c
--- net/if_gre.c        20 Oct 2017 09:35:09 -0000      1.88
+++ net/if_gre.c        9 Jan 2018 00:13:45 -0000
@@ -122,14 +122,11 @@ gre_clone_create(struct if_clone *ifc, i
 {
        struct gre_softc *sc;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (!sc)
-               return (ENOMEM);
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        snprintf(sc->sc_if.if_xname, sizeof sc->sc_if.if_xname, "%s%d",
            ifc->ifc_name, unit);
        sc->sc_if.if_softc = sc;
        sc->sc_if.if_type = IFT_TUNNEL;
-       sc->sc_if.if_addrlen = 0;
        sc->sc_if.if_hdrlen = 24; /* IP + GRE */
        sc->sc_if.if_mtu = GREMTU;
        sc->sc_if.if_flags = IFF_POINTOPOINT|IFF_MULTICAST;
@@ -137,11 +134,6 @@ gre_clone_create(struct if_clone *ifc, i
        sc->sc_if.if_output = gre_output;
        sc->sc_if.if_ioctl = gre_ioctl;
        sc->sc_if.if_rtrequest = p2p_rtrequest;
-       sc->sc_if.if_collisions = 0;
-       sc->sc_if.if_ierrors = 0;
-       sc->sc_if.if_oerrors = 0;
-       sc->sc_if.if_ipackets = 0;
-       sc->sc_if.if_opackets = 0;
        sc->g_dst.s_addr = sc->g_src.s_addr = INADDR_ANY;
        sc->sc_ka_state = GRE_STATE_UKNWN;
 
Index: net/if_loop.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_loop.c,v
retrieving revision 1.84
diff -u -p -r1.84 if_loop.c
--- net/if_loop.c       15 Dec 2017 01:37:30 -0000      1.84
+++ net/if_loop.c       9 Jan 2018 00:00:07 -0000
@@ -167,10 +167,7 @@ loop_clone_create(struct if_clone *ifc, 
 {
        struct ifnet *ifp;
 
-       ifp = malloc(sizeof(*ifp), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (ifp == NULL)
-               return (ENOMEM);
-
+       ifp = malloc(sizeof(*ifp), M_DEVBUF, M_WAITOK|M_ZERO);
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "lo%d", unit);
        ifp->if_softc = NULL;
        ifp->if_mtu = LOMTU;
@@ -181,7 +178,6 @@ loop_clone_create(struct if_clone *ifc, 
        ifp->if_output = looutput;
        ifp->if_type = IFT_LOOP;
        ifp->if_hdrlen = sizeof(u_int32_t);
-       ifp->if_addrlen = 0;
        if (unit == 0) {
                if_attachhead(ifp);
                if_addgroup(ifp, ifc->ifc_name);
Index: net/if_mpe.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_mpe.c,v
retrieving revision 1.63
diff -u -p -r1.63 if_mpe.c
--- net/if_mpe.c        29 Nov 2017 19:36:03 -0000      1.63
+++ net/if_mpe.c        9 Jan 2018 00:00:28 -0000
@@ -81,10 +81,7 @@ mpe_clone_create(struct if_clone *ifc, i
        struct ifnet            *ifp;
        struct mpe_softc        *mpeif;
 
-       if ((mpeif = malloc(sizeof(*mpeif),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       mpeif = malloc(sizeof(*mpeif), M_DEVBUF, M_WAITOK|M_ZERO);
        mpeif->sc_unit = unit;
        ifp = &mpeif->sc_if;
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "mpe%d", unit);
Index: net/if_mpw.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_mpw.c,v
retrieving revision 1.22
diff -u -p -r1.22 if_mpw.c
--- net/if_mpw.c        15 May 2017 14:03:53 -0000      1.22
+++ net/if_mpw.c        9 Jan 2018 00:00:46 -0000
@@ -83,10 +83,7 @@ mpw_clone_create(struct if_clone *ifc, i
        struct mpw_softc *sc;
        struct ifnet *ifp;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO);
-       if (sc == NULL)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        ifp = &sc->sc_if;
        snprintf(ifp->if_xname, sizeof(ifp->if_xname), "mpw%d", unit);
        ifp->if_softc = sc;
Index: net/if_pair.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_pair.c,v
retrieving revision 1.10
diff -u -p -r1.10 if_pair.c
--- net/if_pair.c       23 Jan 2017 11:37:29 -0000      1.10
+++ net/if_pair.c       9 Jan 2018 00:01:27 -0000
@@ -108,10 +108,7 @@ pair_clone_create(struct if_clone *ifc, 
        struct ifnet            *ifp;
        struct pair_softc       *sc;
 
-       if ((sc = malloc(sizeof(*sc),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        ifp = &sc->sc_ac.ac_if;
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "pair%d", unit);
        ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
Index: net/if_pflog.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_pflog.c,v
retrieving revision 1.80
diff -u -p -r1.80 if_pflog.c
--- net/if_pflog.c      11 Aug 2017 21:24:19 -0000      1.80
+++ net/if_pflog.c      9 Jan 2018 00:01:59 -0000
@@ -137,10 +137,7 @@ pflog_clone_create(struct if_clone *ifc,
        struct ifnet *ifp;
        struct pflog_softc *pflogif;
 
-       if ((pflogif = malloc(sizeof(*pflogif),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       pflogif = malloc(sizeof(*pflogif), M_DEVBUF, M_WAITOK|M_ZERO);
        pflogif->sc_unit = unit;
        ifp = &pflogif->sc_if;
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "pflog%d", unit);
Index: net/if_pflow.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_pflow.c,v
retrieving revision 1.85
diff -u -p -r1.85 if_pflow.c
--- net/if_pflow.c      31 Oct 2017 22:05:12 -0000      1.85
+++ net/if_pflow.c      9 Jan 2018 00:03:19 -0000
@@ -145,12 +145,8 @@ pflow_clone_create(struct if_clone *ifc,
        struct ifnet            *ifp;
        struct pflow_softc      *pflowif;
 
-       if ((pflowif = malloc(sizeof(*pflowif),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       pflowif = malloc(sizeof(*pflowif), M_DEVBUF, M_WAITOK|M_ZERO);
        MGET(pflowif->send_nam, M_WAIT, MT_SONAME);
-
        pflowif->sc_version = PFLOW_PROTO_DEFAULT;
 
        /* ipfix template init */
Index: net/if_pfsync.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_pfsync.c,v
retrieving revision 1.255
diff -u -p -r1.255 if_pfsync.c
--- net/if_pfsync.c     20 Nov 2017 10:35:24 -0000      1.255
+++ net/if_pfsync.c     9 Jan 2018 00:05:11 -0000
@@ -300,8 +300,7 @@ pfsync_clone_create(struct if_clone *ifc
 
        pfsync_sync_ok = 1;
 
-       sc = malloc(sizeof(*pfsyncif), M_DEVBUF, M_WAITOK | M_ZERO);
-
+       sc = malloc(sizeof(*pfsyncif), M_DEVBUF, M_WAITOK|M_ZERO);
        for (q = 0; q < PFSYNC_S_COUNT; q++)
                TAILQ_INIT(&sc->sc_qs[q]);
 
Index: net/if_ppp.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_ppp.c,v
retrieving revision 1.109
diff -u -p -r1.109 if_ppp.c
--- net/if_ppp.c        11 Aug 2017 21:24:19 -0000      1.109
+++ net/if_ppp.c        9 Jan 2018 00:15:29 -0000
@@ -205,10 +205,7 @@ ppp_clone_create(struct if_clone *ifc, i
 {
        struct ppp_softc *sc;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (!sc)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        sc->sc_unit = unit;
        snprintf(sc->sc_if.if_xname, sizeof sc->sc_if.if_xname, "%s%d",
            ifc->ifc_name, unit);
Index: net/if_pppoe.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_pppoe.c,v
retrieving revision 1.65
diff -u -p -r1.65 if_pppoe.c
--- net/if_pppoe.c      8 Sep 2017 05:36:53 -0000       1.65
+++ net/if_pppoe.c      9 Jan 2018 00:15:54 -0000
@@ -196,10 +196,7 @@ pppoe_clone_create(struct if_clone *ifc,
        struct pppoe_softc *sc, *tmpsc;
        u_int32_t unique;
 
-        sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_CANFAIL|M_ZERO);
-        if (sc == NULL)
-                return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        snprintf(sc->sc_sppp.pp_if.if_xname,
                 sizeof(sc->sc_sppp.pp_if.if_xname),
                 "pppoe%d", unit);
Index: net/if_switch.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_switch.c,v
retrieving revision 1.21
diff -u -p -r1.21 if_switch.c
--- net/if_switch.c     20 Nov 2017 10:17:40 -0000      1.21
+++ net/if_switch.c     9 Jan 2018 00:06:40 -0000
@@ -151,7 +151,6 @@ switch_clone_create(struct if_clone *ifc
 
        sc = malloc(sizeof(struct switch_softc), M_DEVBUF, M_WAITOK|M_ZERO);
        ifp = &sc->sc_if;
-
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "switch%d", unit);
        ifp->if_softc = sc;
        ifp->if_mtu = ETHERMTU;
@@ -159,7 +158,6 @@ switch_clone_create(struct if_clone *ifc
        ifp->if_output = NULL;
        ifp->if_start = NULL;
        ifp->if_type = IFT_BRIDGE;
-       ifp->if_addrlen = 0;
        ifp->if_hdrlen = ETHER_HDR_LEN;
        TAILQ_INIT(&sc->sc_swpo_list);
 
Index: net/if_trunk.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_trunk.c,v
retrieving revision 1.134
diff -u -p -r1.134 if_trunk.c
--- net/if_trunk.c      14 Aug 2017 08:31:00 -0000      1.134
+++ net/if_trunk.c      9 Jan 2018 00:17:09 -0000
@@ -157,9 +157,7 @@ trunk_clone_create(struct if_clone *ifc,
        struct ifnet *ifp;
        int i, error = 0;
 
-       if ((tr = malloc(sizeof *tr, M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK|M_ZERO);
        tr->tr_unit = unit;
        tr->tr_proto = TRUNK_PROTO_NONE;
        for (i = 0; trunk_protos[i].ti_proto != TRUNK_PROTO_NONE; i++) {
Index: net/if_tun.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_tun.c,v
retrieving revision 1.179
diff -u -p -r1.179 if_tun.c
--- net/if_tun.c        30 Dec 2017 23:08:29 -0000      1.179
+++ net/if_tun.c        9 Jan 2018 00:07:50 -0000
@@ -193,10 +193,7 @@ tun_create(struct if_clone *ifc, int uni
        struct tun_softc        *tp;
        struct ifnet            *ifp;
 
-       tp = malloc(sizeof(*tp), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (tp == NULL)
-               return (ENOMEM);
-
+       tp = malloc(sizeof(*tp), M_DEVBUF, M_WAITOK|M_ZERO);
        tp->tun_unit = unit;
        tp->tun_flags = TUN_INITED|TUN_STAYUP;
 
Index: net/if_vether.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_vether.c,v
retrieving revision 1.29
diff -u -p -r1.29 if_vether.c
--- net/if_vether.c     22 Jan 2017 10:17:39 -0000      1.29
+++ net/if_vether.c     9 Jan 2018 00:08:17 -0000
@@ -75,10 +75,7 @@ vether_clone_create(struct if_clone *ifc
        struct ifnet            *ifp;
        struct vether_softc     *sc;
 
-       if ((sc = malloc(sizeof(*sc),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        ifp = &sc->sc_ac.ac_if;
        snprintf(ifp->if_xname, sizeof ifp->if_xname, "vether%d", unit);
        ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
Index: net/if_vlan.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_vlan.c,v
retrieving revision 1.174
diff -u -p -r1.174 if_vlan.c
--- net/if_vlan.c       22 Jun 2017 11:34:51 -0000      1.174
+++ net/if_vlan.c       9 Jan 2018 00:08:41 -0000
@@ -157,10 +157,7 @@ vlan_clone_create(struct if_clone *ifc, 
        struct ifvlan   *ifv;
        struct ifnet    *ifp;
 
-       ifv = malloc(sizeof(*ifv), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (ifv == NULL)
-               return (ENOMEM);
-
+       ifv = malloc(sizeof(*ifv), M_DEVBUF, M_WAITOK|M_ZERO);
        LIST_INIT(&ifv->vlan_mc_listhead);
        ifp = &ifv->ifv_if;
        ifp->if_softc = ifv;
Index: net/if_vxlan.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_vxlan.c,v
retrieving revision 1.64
diff -u -p -r1.64 if_vxlan.c
--- net/if_vxlan.c      20 Nov 2017 10:35:24 -0000      1.64
+++ net/if_vxlan.c      9 Jan 2018 00:18:34 -0000
@@ -125,10 +125,7 @@ vxlan_clone_create(struct if_clone *ifc,
        struct ifnet            *ifp;
        struct vxlan_softc      *sc;
 
-       if ((sc = malloc(sizeof(*sc),
-           M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        sc->sc_imo.imo_membership = malloc(
            (sizeof(struct in_multi *) * IP_MIN_MEMBERSHIPS), M_IPMOPTS,
            M_WAITOK|M_ZERO);
Index: netinet/ip_carp.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_carp.c,v
retrieving revision 1.320
diff -u -p -r1.320 ip_carp.c
--- netinet/ip_carp.c   23 Nov 2017 13:32:25 -0000      1.320
+++ netinet/ip_carp.c   9 Jan 2018 00:12:30 -0000
@@ -785,10 +785,7 @@ carp_clone_create(struct if_clone *ifc, 
        struct carp_softc *sc;
        struct ifnet *ifp;
 
-       sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
-       if (!sc)
-               return (ENOMEM);
-
+       sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
        refcnt_init(&sc->sc_refcnt);
        
        SRPL_INIT(&sc->carp_vhosts);

Reply via email to