From: Jo-Philipp Wich Date: Tue, 12 Oct 2010 01:49:20 +0000 (+0000) Subject: libiwinfo: fix two segfaults in nl80211 backend X-Git-Tag: 0.10.0~634 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=7c8824f0faf082f03037b554a4b57da863661fcb libiwinfo: fix two segfaults in nl80211 backend --- diff --git a/contrib/package/iwinfo/src/iwinfo_nl80211.c b/contrib/package/iwinfo/src/iwinfo_nl80211.c index 49ddf13fb..7f27e2533 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)