mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
P2PS: Enable Probe Request frame processing by P2P Client
1. Add global p2p_cli_probe property to enable/disable Probe Request frame RX reporting for connected P2P Clients. The property can be set to 0 - disable or 1 - enable. The default value is 0. 2. Enable Probe Request frame RX reporting for P2P Client on WPA_COMPLETED state if p2p_cli_probe property is set to 1. Disable it when an interface state is changing to any other state. 3. Don't cancel Probe Request frame RX reporting on wpa_stop_listen for a connected P2P Client handling Probe Request frames. Signed-off-by: Max Stepanov <Max.Stepanov@intel.com> Reviewed-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
734ddf6125
commit
07c1e987d5
@ -4180,6 +4180,7 @@ static const struct global_parse_data global_fields[] = {
|
|||||||
{ IPV4(ip_addr_mask), 0 },
|
{ IPV4(ip_addr_mask), 0 },
|
||||||
{ IPV4(ip_addr_start), 0 },
|
{ IPV4(ip_addr_start), 0 },
|
||||||
{ IPV4(ip_addr_end), 0 },
|
{ IPV4(ip_addr_end), 0 },
|
||||||
|
{ INT_RANGE(p2p_cli_probe, 0, 1), 0 },
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
{ FUNC(country), CFG_CHANGED_COUNTRY },
|
{ FUNC(country), CFG_CHANGED_COUNTRY },
|
||||||
{ INT(bss_max_count), 0 },
|
{ INT(bss_max_count), 0 },
|
||||||
|
@ -967,6 +967,18 @@ struct wpa_config {
|
|||||||
*/
|
*/
|
||||||
int p2p_no_group_iface;
|
int p2p_no_group_iface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* p2p_cli_probe - Enable/disable P2P CLI probe request handling
|
||||||
|
*
|
||||||
|
* If this parameter is set to 1, a connected P2P Client will receive
|
||||||
|
* and handle Probe Request frames. Setting this parameter to 0
|
||||||
|
* disables this option. Default value: 0.
|
||||||
|
*
|
||||||
|
* Note: Setting this property at run time takes effect on the following
|
||||||
|
* interface state transition to/from the WPA_COMPLETED state.
|
||||||
|
*/
|
||||||
|
int p2p_cli_probe;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* okc - Whether to enable opportunistic key caching by default
|
* okc - Whether to enable opportunistic key caching by default
|
||||||
*
|
*
|
||||||
|
@ -1131,6 +1131,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
|
|||||||
if (config->p2p_ignore_shared_freq)
|
if (config->p2p_ignore_shared_freq)
|
||||||
fprintf(f, "p2p_ignore_shared_freq=%u\n",
|
fprintf(f, "p2p_ignore_shared_freq=%u\n",
|
||||||
config->p2p_ignore_shared_freq);
|
config->p2p_ignore_shared_freq);
|
||||||
|
if (config->p2p_cli_probe)
|
||||||
|
fprintf(f, "p2p_cli_probe=%u\n",
|
||||||
|
config->p2p_cli_probe);
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
if (config->country[0] && config->country[1]) {
|
if (config->country[0] && config->country[1]) {
|
||||||
fprintf(f, "country=%c%c\n",
|
fprintf(f, "country=%c%c\n",
|
||||||
|
@ -1874,6 +1874,7 @@ static void wpas_p2p_clone_config(struct wpa_supplicant *dst,
|
|||||||
d->wps_nfc_dh_privkey = wpabuf_dup(s->wps_nfc_dh_privkey);
|
d->wps_nfc_dh_privkey = wpabuf_dup(s->wps_nfc_dh_privkey);
|
||||||
d->wps_nfc_dh_pubkey = wpabuf_dup(s->wps_nfc_dh_pubkey);
|
d->wps_nfc_dh_pubkey = wpabuf_dup(s->wps_nfc_dh_pubkey);
|
||||||
}
|
}
|
||||||
|
d->p2p_cli_probe = s->p2p_cli_probe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2384,7 +2385,14 @@ static void wpas_stop_listen(void *ctx)
|
|||||||
wpa_s->roc_waiting_drv_freq = 0;
|
wpa_s->roc_waiting_drv_freq = 0;
|
||||||
}
|
}
|
||||||
wpa_drv_set_ap_wps_ie(wpa_s, NULL, NULL, NULL);
|
wpa_drv_set_ap_wps_ie(wpa_s, NULL, NULL, NULL);
|
||||||
wpa_drv_probe_req_report(wpa_s, 0);
|
|
||||||
|
/*
|
||||||
|
* Don't cancel Probe Request RX reporting for a connected P2P Client
|
||||||
|
* handling Probe Request frames.
|
||||||
|
*/
|
||||||
|
if (!wpa_s->p2p_cli_probe)
|
||||||
|
wpa_drv_probe_req_report(wpa_s, 0);
|
||||||
|
|
||||||
wpas_p2p_listen_work_done(wpa_s);
|
wpas_p2p_listen_work_done(wpa_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -728,6 +728,30 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
|
|||||||
wpa_s->normal_scans = 0;
|
wpa_s->normal_scans = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_P2P
|
||||||
|
/*
|
||||||
|
* P2PS client has to reply to Probe Request frames received on the
|
||||||
|
* group operating channel. Enable Probe Request frame reporting for
|
||||||
|
* P2P connected client in case p2p_cli_probe configuration property is
|
||||||
|
* set to 1.
|
||||||
|
*/
|
||||||
|
if (wpa_s->conf->p2p_cli_probe && wpa_s->current_ssid &&
|
||||||
|
wpa_s->current_ssid->mode == WPAS_MODE_INFRA &&
|
||||||
|
wpa_s->current_ssid->p2p_group) {
|
||||||
|
if (state == WPA_COMPLETED && !wpa_s->p2p_cli_probe) {
|
||||||
|
wpa_dbg(wpa_s, MSG_DEBUG,
|
||||||
|
"P2P: Enable CLI Probe Request RX reporting");
|
||||||
|
wpa_s->p2p_cli_probe =
|
||||||
|
wpa_drv_probe_req_report(wpa_s, 1) >= 0;
|
||||||
|
} else if (state != WPA_COMPLETED && wpa_s->p2p_cli_probe) {
|
||||||
|
wpa_dbg(wpa_s, MSG_DEBUG,
|
||||||
|
"P2P: Disable CLI Probe Request RX reporting");
|
||||||
|
wpa_s->p2p_cli_probe = 0;
|
||||||
|
wpa_drv_probe_req_report(wpa_s, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
if (state != WPA_SCANNING)
|
if (state != WPA_SCANNING)
|
||||||
wpa_supplicant_notify_scanning(wpa_s, 0);
|
wpa_supplicant_notify_scanning(wpa_s, 0);
|
||||||
|
|
||||||
|
@ -818,6 +818,7 @@ struct wpa_supplicant {
|
|||||||
unsigned int p2p_peer_oob_pk_hash_known:1;
|
unsigned int p2p_peer_oob_pk_hash_known:1;
|
||||||
unsigned int p2p_disable_ip_addr_req:1;
|
unsigned int p2p_disable_ip_addr_req:1;
|
||||||
unsigned int p2ps_join_addr_valid:1;
|
unsigned int p2ps_join_addr_valid:1;
|
||||||
|
unsigned int p2p_cli_probe:1;
|
||||||
int p2p_persistent_go_freq;
|
int p2p_persistent_go_freq;
|
||||||
int p2p_persistent_id;
|
int p2p_persistent_id;
|
||||||
int p2p_go_intent;
|
int p2p_go_intent;
|
||||||
|
Loading…
Reference in New Issue
Block a user