WPS ER: Only send Enrollee notification on Probe Request and M1
No need to do this for M3..M7 or NACK/ACK/Done messages.
This commit is contained in:
parent
c94ec09ed3
commit
5d34ab644d
1 changed files with 16 additions and 4 deletions
|
@ -668,8 +668,19 @@ static struct wps_er_sta * wps_er_add_sta_data(struct wps_er_ap *ap,
|
||||||
{
|
{
|
||||||
struct wps_er_sta *sta = wps_er_sta_get(ap, addr);
|
struct wps_er_sta *sta = wps_er_sta_get(ap, addr);
|
||||||
int new_sta = 0;
|
int new_sta = 0;
|
||||||
|
int m1;
|
||||||
|
|
||||||
|
m1 = !probe_req && attr->msg_type && *attr->msg_type == WPS_M1;
|
||||||
|
|
||||||
if (sta == NULL) {
|
if (sta == NULL) {
|
||||||
|
/*
|
||||||
|
* Only allow new STA entry to be added based on Probe Request
|
||||||
|
* or M1. This will filter out bogus events and anything that
|
||||||
|
* may have been ongoing at the time ER subscribed for events.
|
||||||
|
*/
|
||||||
|
if (!probe_req && !m1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
sta = os_zalloc(sizeof(*sta));
|
sta = os_zalloc(sizeof(*sta));
|
||||||
if (sta == NULL)
|
if (sta == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -680,7 +691,7 @@ static struct wps_er_sta * wps_er_add_sta_data(struct wps_er_ap *ap,
|
||||||
new_sta = 1;
|
new_sta = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!probe_req)
|
if (m1)
|
||||||
sta->m1_received = 1;
|
sta->m1_received = 1;
|
||||||
|
|
||||||
if (attr->config_methods && (!probe_req || !sta->m1_received))
|
if (attr->config_methods && (!probe_req || !sta->m1_received))
|
||||||
|
@ -745,9 +756,8 @@ static struct wps_er_sta * wps_er_add_sta_data(struct wps_er_ap *ap,
|
||||||
eloop_cancel_timeout(wps_er_sta_timeout, sta, NULL);
|
eloop_cancel_timeout(wps_er_sta_timeout, sta, NULL);
|
||||||
eloop_register_timeout(300, 0, wps_er_sta_timeout, sta, NULL);
|
eloop_register_timeout(300, 0, wps_er_sta_timeout, sta, NULL);
|
||||||
|
|
||||||
if (!probe_req || new_sta)
|
if (m1 || new_sta)
|
||||||
wps_er_sta_event(ap->er->wps, sta,
|
wps_er_sta_event(ap->er->wps, sta, WPS_EV_ER_ENROLLEE_ADD);
|
||||||
WPS_EV_ER_ENROLLEE_ADD);
|
|
||||||
|
|
||||||
return sta;
|
return sta;
|
||||||
}
|
}
|
||||||
|
@ -962,6 +972,8 @@ static void wps_er_process_wlanevent_eap(struct wps_er_ap *ap, const u8 *addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
sta = wps_er_add_sta_data(ap, addr, &attr, 0);
|
sta = wps_er_add_sta_data(ap, addr, &attr, 0);
|
||||||
|
if (sta == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
if (attr.msg_type && *attr.msg_type == WPS_M1)
|
if (attr.msg_type && *attr.msg_type == WPS_M1)
|
||||||
wps_er_sta_start(sta, msg);
|
wps_er_sta_start(sta, msg);
|
||||||
|
|
Loading…
Reference in a new issue