wifi: prioritize rsne over wpaie

if beacon/proble contains both wpa information element and rsne, the rsne wins.
This commit is contained in:
cinap_lenrek 2015-10-17 14:45:25 +02:00
parent 2f99484b9d
commit 5ca4afb249

View file

@ -397,6 +397,7 @@ recvbeacon(Wifi *wifi, Wnode *wn, uchar *d, int len)
{
static uchar wpa1oui[4] = { 0x00, 0x50, 0xf2, 0x01 };
uchar *e, *x, *p, t;
int rsnset;
len -= 8+2+2;
if(len < 0)
@ -408,6 +409,7 @@ recvbeacon(Wifi *wifi, Wnode *wn, uchar *d, int len)
wn->cap = d[0] | d[1]<<8;
d += 2;
rsnset = 0;
for(e = d + len; d+2 <= e; d = x){
d += 2;
x = d + d[-1];
@ -450,13 +452,14 @@ recvbeacon(Wifi *wifi, Wnode *wn, uchar *d, int len)
break;
case 221: /* vendor specific */
len = x - d;
if(len < sizeof(wpa1oui) || memcmp(d, wpa1oui, sizeof(wpa1oui)) != 0)
if(rsnset || len < sizeof(wpa1oui) || memcmp(d, wpa1oui, sizeof(wpa1oui)) != 0)
break;
/* no break */
case 48: /* RSN information */
len = x - &d[-2];
memmove(wn->brsne, &d[-2], len);
wn->brsnelen = len;
rsnset = 1;
break;
}
}