Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Dec 2012 12:53:06 +0400
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        Monthadar Al Jaberi <monthadar@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r244389 - head/sys/dev/wtap
Message-ID:  <20121218085306.GK94420@FreeBSD.org>
In-Reply-To: <201212180844.qBI8ixdX097633@svn.freebsd.org>
References:  <201212180844.qBI8ixdX097633@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--UlVJffcvxoiEqYs2
Content-Type: text/plain; charset=koi8-r
Content-Disposition: inline

  Monthadar,

On Tue, Dec 18, 2012 at 08:44:59AM +0000, Monthadar Al Jaberi wrote:
M> Author: monthadar
M> Date: Tue Dec 18 08:44:59 2012
M> New Revision: 244389
M> URL: http://svnweb.freebsd.org/changeset/base/244389
M> 
M> Log:
M>   wtap should check if ieee80211_vap_setup fails.
M>   
M>   * If ieee80211_vap_setup fails, we free allocated M_80211_VAP
M>     memory and return NULL;
M>   
M>   Approved by: adrian (mentor)
M> 
M> Modified:
M>   head/sys/dev/wtap/if_wtap.c
M> 
M> Modified: head/sys/dev/wtap/if_wtap.c
M> ==============================================================================
M> --- head/sys/dev/wtap/if_wtap.c	Tue Dec 18 08:41:23 2012	(r244388)
M> +++ head/sys/dev/wtap/if_wtap.c	Tue Dec 18 08:44:59 2012	(r244389)
M> @@ -334,6 +334,10 @@ wtap_vap_create(struct ieee80211com *ic,
M>  	vap = (struct ieee80211vap *) avp;
M>  	error = ieee80211_vap_setup(ic, vap, name, unit, IEEE80211_M_MBSS,
M>  	    flags | IEEE80211_CLONE_NOBEACONS, bssid, mac);
M> +	if (error) {
M> +		free((struct wtap_vap*) vap, M_80211_VAP);
M> +		return NULL;
M> +	}
M>  
M>  	/* override various methods */
M>  	avp->av_recv_mgmt = vap->iv_recv_mgmt;

You don't need to cast first argument of free(9). And you don't need a cast
before malloc(9) as well.

If you are calling malloc(9) with M_NOWAIT, you need to check return result.

Also, more stylish would be to supply to free() the same variable that was
assigned at malloc(9) call, in this particular case it is "avp".

Patch attached.

-- 
Totus tuus, Glebius.

--UlVJffcvxoiEqYs2
Content-Type: text/x-diff; charset=koi8-r
Content-Disposition: attachment; filename="if_wtap.c.diff"

Index: if_wtap.c
===================================================================
--- if_wtap.c	(revision 244389)
+++ if_wtap.c	(working copy)
@@ -326,8 +326,9 @@
 
 	 DWTAP_PRINTF("%s\n", __func__);
 
-	avp = (struct wtap_vap *) malloc(sizeof(struct wtap_vap),
-	    M_80211_VAP, M_NOWAIT | M_ZERO);
+	avp = malloc(sizeof(struct wtap_vap), M_80211_VAP, M_NOWAIT | M_ZERO);
+	if (avp == NULL)
+		return (NULL);
 	avp->id = sc->id;
 	avp->av_md = sc->sc_md;
 	avp->av_bcinterval = msecs_to_ticks(BEACON_INTRERVAL + 100*sc->id);
@@ -335,8 +336,8 @@
 	error = ieee80211_vap_setup(ic, vap, name, unit, IEEE80211_M_MBSS,
 	    flags | IEEE80211_CLONE_NOBEACONS, bssid, mac);
 	if (error) {
-		free((struct wtap_vap*) vap, M_80211_VAP);
-		return NULL;
+		free(avp, M_80211_VAP);
+		return (NULL);
 	}
 
 	/* override various methods */

--UlVJffcvxoiEqYs2--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121218085306.GK94420>