Module Name: src Committed By: msaitoh Date: Mon Oct 23 09:32:00 UTC 2017
Modified Files: src/sys/net: if_faith.c if_loop.c if_mpls.c Log Message: If if_attach() failed in the attach function, free resources and return. To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/sys/net/if_faith.c cvs rdiff -u -r1.95 -r1.96 src/sys/net/if_loop.c cvs rdiff -u -r1.29 -r1.30 src/sys/net/if_mpls.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_faith.c diff -u src/sys/net/if_faith.c:1.55 src/sys/net/if_faith.c:1.56 --- src/sys/net/if_faith.c:1.55 Mon Dec 12 03:55:57 2016 +++ src/sys/net/if_faith.c Mon Oct 23 09:32:00 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_faith.c,v 1.55 2016/12/12 03:55:57 ozaki-r Exp $ */ +/* $NetBSD: if_faith.c,v 1.56 2017/10/23 09:32:00 msaitoh Exp $ */ /* $KAME: if_faith.c,v 1.21 2001/02/20 07:59:26 itojun Exp $ */ /* @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_faith.c,v 1.55 2016/12/12 03:55:57 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_faith.c,v 1.56 2017/10/23 09:32:00 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -140,6 +140,7 @@ static int faith_clone_create(struct if_clone *ifc, int unit) { struct ifnet *ifp; + int rv; ifp = if_alloc(IFT_FAITH); @@ -154,7 +155,11 @@ faith_clone_create(struct if_clone *ifc, ifp->if_hdrlen = 0; ifp->if_addrlen = 0; ifp->if_dlt = DLT_NULL; - if_attach(ifp); + rv = if_attach(ifp); + if (rv != 0) { + if_free(ifp); + return rv; + } if_alloc_sadl(ifp); bpf_attach(ifp, DLT_NULL, sizeof(u_int)); atomic_inc_uint(&faith_count); Index: src/sys/net/if_loop.c diff -u src/sys/net/if_loop.c:1.95 src/sys/net/if_loop.c:1.96 --- src/sys/net/if_loop.c:1.95 Thu Sep 21 11:42:17 2017 +++ src/sys/net/if_loop.c Mon Oct 23 09:32:00 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_loop.c,v 1.95 2017/09/21 11:42:17 knakahara Exp $ */ +/* $NetBSD: if_loop.c,v 1.96 2017/10/23 09:32:00 msaitoh Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_loop.c,v 1.95 2017/09/21 11:42:17 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_loop.c,v 1.96 2017/10/23 09:32:00 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -175,6 +175,7 @@ static int loop_clone_create(struct if_clone *ifc, int unit) { struct ifnet *ifp; + int rv; ifp = if_alloc(IFT_LOOP); @@ -195,7 +196,11 @@ loop_clone_create(struct if_clone *ifc, IFQ_SET_READY(&ifp->if_snd); if (unit == 0) lo0ifp = ifp; - if_attach(ifp); + rv = if_attach(ifp); + if (rv != 0) { + if_free(ifp); + return rv; + } if_alloc_sadl(ifp); bpf_attach(ifp, DLT_NULL, sizeof(u_int)); #ifdef MBUFTRACE Index: src/sys/net/if_mpls.c diff -u src/sys/net/if_mpls.c:1.29 src/sys/net/if_mpls.c:1.30 --- src/sys/net/if_mpls.c:1.29 Mon Dec 12 03:55:57 2016 +++ src/sys/net/if_mpls.c Mon Oct 23 09:32:00 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mpls.c,v 1.29 2016/12/12 03:55:57 ozaki-r Exp $ */ +/* $NetBSD: if_mpls.c,v 1.30 2017/10/23 09:32:00 msaitoh Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_mpls.c,v 1.29 2016/12/12 03:55:57 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mpls.c,v 1.30 2017/10/23 09:32:00 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -149,6 +149,7 @@ static int mpls_clone_create(struct if_clone *ifc, int unit) { struct mpls_softc *sc; + int rv; atomic_inc_uint(&mpls_count); sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); @@ -165,7 +166,12 @@ mpls_clone_create(struct if_clone *ifc, sc->sc_if.if_output = mpls_output; sc->sc_if.if_ioctl = mpls_ioctl; - if_attach(&sc->sc_if); + rv = if_attach(&sc->sc_if); + if (rv != 0) { + free(sc, M_DEVBUF); + atomic_dec_uint(&mpls_count); + return rv; + } if_alloc_sadl(&sc->sc_if); bpf_attach(&sc->sc_if, DLT_NULL, sizeof(uint32_t)); return 0;