iwinfo: avoid creating tmp.* ifaces for scanning
If the iface to scan on already is in ad-hoc, station or monitor mode then do not spawn a temporary iface. Also preventively disable IPv6 on temporary ifaces before bringing them up to avoid potential security issues. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 41830
This commit is contained in:
parent
bd7642f1a9
commit
b84346e141
1 changed files with 22 additions and 2 deletions
|
@ -720,9 +720,10 @@ out:
|
||||||
static char * nl80211_ifadd(const char *ifname)
|
static char * nl80211_ifadd(const char *ifname)
|
||||||
{
|
{
|
||||||
int phyidx;
|
int phyidx;
|
||||||
char *rv = NULL;
|
char *rv = NULL, path[PATH_MAX];
|
||||||
static char nif[IFNAMSIZ] = { 0 };
|
static char nif[IFNAMSIZ] = { 0 };
|
||||||
struct nl80211_msg_conveyor *req, *res;
|
struct nl80211_msg_conveyor *req, *res;
|
||||||
|
FILE *sysfs;
|
||||||
|
|
||||||
req = nl80211_msg(ifname, NL80211_CMD_NEW_INTERFACE, 0);
|
req = nl80211_msg(ifname, NL80211_CMD_NEW_INTERFACE, 0);
|
||||||
if (req)
|
if (req)
|
||||||
|
@ -734,6 +735,15 @@ static char * nl80211_ifadd(const char *ifname)
|
||||||
|
|
||||||
nl80211_send(req, NULL, NULL);
|
nl80211_send(req, NULL, NULL);
|
||||||
|
|
||||||
|
snprintf(path, sizeof(path) - 1,
|
||||||
|
"/proc/sys/net/ipv6/conf/%s/disable_ipv6", nif);
|
||||||
|
|
||||||
|
if ((sysfs = fopen(path, "w")) != NULL)
|
||||||
|
{
|
||||||
|
fwrite("0\n", 1, 2, sysfs);
|
||||||
|
fclose(sysfs);
|
||||||
|
}
|
||||||
|
|
||||||
rv = nif;
|
rv = nif;
|
||||||
|
|
||||||
nla_put_failure:
|
nla_put_failure:
|
||||||
|
@ -1865,7 +1875,7 @@ static int nl80211_get_scanlist_nl(const char *ifname, char *buf, int *len)
|
||||||
|
|
||||||
static int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
static int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
||||||
{
|
{
|
||||||
int freq, rssi, qmax, count;
|
int freq, rssi, qmax, count, mode;
|
||||||
char *res;
|
char *res;
|
||||||
char ssid[128] = { 0 };
|
char ssid[128] = { 0 };
|
||||||
char bssid[18] = { 0 };
|
char bssid[18] = { 0 };
|
||||||
|
@ -1983,6 +1993,16 @@ static int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* station / ad-hoc / monitor scan */
|
||||||
|
else if (!nl80211_get_mode(ifname, &mode) &&
|
||||||
|
(mode == IWINFO_OPMODE_ADHOC ||
|
||||||
|
mode == IWINFO_OPMODE_CLIENT ||
|
||||||
|
mode == IWINFO_OPMODE_MONITOR) &&
|
||||||
|
iwinfo_ifup(ifname))
|
||||||
|
{
|
||||||
|
return nl80211_get_scanlist_nl(ifname, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
/* AP scan */
|
/* AP scan */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue