diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-12 01:49:20 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-12 01:49:20 +0000 |
commit | 7c8824f0faf082f03037b554a4b57da863661fcb (patch) | |
tree | 96ccbebb400f6ad9ab62f530a75a4275eef6c397 /contrib/package/iwinfo/src | |
parent | bbcaef2c6c9eb87c68d994179f890df3ab625544 (diff) |
libiwinfo: fix two segfaults in nl80211 backend
Diffstat (limited to 'contrib/package/iwinfo/src')
-rw-r--r-- | contrib/package/iwinfo/src/iwinfo_nl80211.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/contrib/package/iwinfo/src/iwinfo_nl80211.c b/contrib/package/iwinfo/src/iwinfo_nl80211.c index 49ddf13fb8..7f27e25338 100644 --- a/contrib/package/iwinfo/src/iwinfo_nl80211.c +++ b/contrib/package/iwinfo/src/iwinfo_nl80211.c @@ -136,6 +136,12 @@ static void nl80211_free(struct nl80211_msg_conveyor *cv) if( cv && cv->msg ) nlmsg_free(cv->msg); + + if( cv ) + { + cv->cb = NULL; + cv->msg = NULL; + } } static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname, int cmd, int flags) @@ -578,6 +584,7 @@ int nl80211_get_signal(const char *ifname, int *buf) int nl80211_get_noise(const char *ifname, int *buf) { + int rv = -1; struct nl80211_msg_conveyor *req, *res; struct nlattr *si[NL80211_SURVEY_INFO_MAX + 1]; @@ -595,10 +602,11 @@ int nl80211_get_noise(const char *ifname, int *buf) if( res->attr[NL80211_ATTR_SURVEY_INFO] ) { if( !nla_parse_nested(si, NL80211_SURVEY_INFO_MAX, - res->attr[NL80211_ATTR_SURVEY_INFO], sp) ) + res->attr[NL80211_ATTR_SURVEY_INFO], sp) && + si[NL80211_SURVEY_INFO_NOISE] ) { *buf = (int8_t)nla_get_u8(si[NL80211_SURVEY_INFO_NOISE]); - return 0; + rv = 0; } } nl80211_free(res); @@ -606,7 +614,7 @@ int nl80211_get_noise(const char *ifname, int *buf) nl80211_free(req); } - return -1; + return rv; } int nl80211_get_quality(const char *ifname, int *buf) |