aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211/ieee80211_ioctl.c
diff options
context:
space:
mode:
authorRui Paulo <rpaulo@FreeBSD.org>2010-06-01 14:20:58 +0000
committerRui Paulo <rpaulo@FreeBSD.org>2010-06-01 14:20:58 +0000
commit7b4d954cc386da2edb63738863f0670eefa10f69 (patch)
tree0b8f3436919727753a9b6038530837f91634547c /sys/net80211/ieee80211_ioctl.c
parent298633759afe9ddf4f33ffe92cd628cfc986d237 (diff)
downloadsrc-7b4d954cc386da2edb63738863f0670eefa10f69.tar.gz
src-7b4d954cc386da2edb63738863f0670eefa10f69.zip
Fix resource leaks in ieee80211_ioctl_setchanlist() in case of error.
Found with: Coverity Prevent(tm) CID: 4115 MFC after: 3 days
Notes
Notes: svn path=/head/; revision=208699
Diffstat (limited to 'sys/net80211/ieee80211_ioctl.c')
-rw-r--r--sys/net80211/ieee80211_ioctl.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 7491770d8e90..d16797b31054 100644
--- a/sys/net80211/ieee80211_ioctl.c
+++ b/sys/net80211/ieee80211_ioctl.c
@@ -1628,8 +1628,10 @@ ieee80211_ioctl_setchanlist(struct ieee80211vap *vap, struct ieee80211req *ireq)
if (list == NULL)
return ENOMEM;
error = copyin(ireq->i_data, list, ireq->i_len);
- if (error)
+ if (error) {
+ free(list, M_TEMP);
return error;
+ }
nchan = 0;
chanlist = list + ireq->i_len; /* NB: zero'd already */
maxchan = ireq->i_len * NBBY;
@@ -1645,8 +1647,10 @@ ieee80211_ioctl_setchanlist(struct ieee80211vap *vap, struct ieee80211req *ireq)
nchan++;
}
}
- if (nchan == 0)
+ if (nchan == 0) {
+ free(list, M_TEMP);
return EINVAL;
+ }
if (ic->ic_bsschan != IEEE80211_CHAN_ANYC && /* XXX */
isclr(chanlist, ic->ic_bsschan->ic_ieee))
ic->ic_bsschan = IEEE80211_CHAN_ANYC;