BB: package: fix segfault of iwinfo.scanlist("radio0").
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 12 Aug 2014 11:15:38 +0000 (11:15 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 12 Aug 2014 11:15:38 +0000 (11:15 +0000)
commitc36f8b025f3fc38c2f7a2a9b7e8cbc87d8160cc3
treeef89fbb48786d9106c38e8b138f3e61fbd301661
parenta4e42fd26e98a5d8d136d057f44b6880a399968e
BB: package: fix segfault of iwinfo.scanlist("radio0").

This is a bug revealed in r41830.

First, the static variable `char nif[IFNAMSIZ]` of nl80211_phy2ifname()
would be zeroed out if the argument is "wlan0" or the like.  This will
happen in the following call stack.

 nl80211_get_scanlist("radio0", buf, len);
   nl80211_phy2ifname("radio0") // return static var nif with content "wlan0"
   nl80211_get_scanlist(nif, buf, len); // tail call
     nl80211_get_mode(nif);
        nl80211_phy2ifname(nif); // zero out nif

Later we try nl80211_ifadd("") which was supposed to create interface
"tmp.", but that won't happen because nl80211_msg() will put an invalid
ifidx 0 to the nlmsg.

Then iwinfo_ifup() and iwinfo_ifdown() would fail and happily
nl80211_get_scanlist() returned 0 and left *len undefined.

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Backport of r42151

SVN-Revision: 42152
package/network/utils/iwinfo/src/iwinfo_lua.c
package/network/utils/iwinfo/src/iwinfo_nl80211.c