summaryrefslogtreecommitdiffhomepage
path: root/contrib/package/iwinfo
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2010-10-12 01:49:20 +0000
committerJo-Philipp Wich <jow@openwrt.org>2010-10-12 01:49:20 +0000
commit7c8824f0faf082f03037b554a4b57da863661fcb (patch)
tree96ccbebb400f6ad9ab62f530a75a4275eef6c397 /contrib/package/iwinfo
parentbbcaef2c6c9eb87c68d994179f890df3ab625544 (diff)
libiwinfo: fix two segfaults in nl80211 backend
Diffstat (limited to 'contrib/package/iwinfo')
-rw-r--r--contrib/package/iwinfo/src/iwinfo_nl80211.c14
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 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)