From b4a5dfa95da694e3f2bf1f635e3c039c726e65b9 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 24 Aug 2012 00:23:44 +0300 Subject: [PATCH] P2P: Limit maximum number of stored P2P clients to 100 This limits the maximum size of the p2p_client_list parameter that is maintained at the GO for a persistent group. In other words, only the 100 most recently seen P2P clients are kept in the list. Signed-hostap: Jouni Malinen intended-for: hostap-1 --- wpa_supplicant/config_ssid.h | 4 ++++ wpa_supplicant/p2p_supplicant.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h index 476a98492..232c9c0d0 100644 --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -431,6 +431,10 @@ struct wpa_ssid { */ size_t num_p2p_clients; +#ifndef P2P_MAX_STORED_CLIENTS +#define P2P_MAX_STORED_CLIENTS 100 +#endif /* P2P_MAX_STORED_CLIENTS */ + /** * p2p_group - Network generated as a P2P group (used internally) */ diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index cf4b3f21b..32b7b4488 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -560,7 +560,7 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s, break; } - if (!found) { + if (!found && s->num_p2p_clients < P2P_MAX_STORED_CLIENTS) { n = os_realloc_array(s->p2p_client_list, s->num_p2p_clients + 1, ETH_ALEN); if (n == NULL) @@ -568,6 +568,15 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s, os_memcpy(n + s->num_p2p_clients * ETH_ALEN, addr, ETH_ALEN); s->p2p_client_list = n; s->num_p2p_clients++; + } else if (!found) { + /* Not enough room for an additional entry - drop the oldest + * entry */ + os_memmove(s->p2p_client_list, + s->p2p_client_list + ETH_ALEN, + (s->num_p2p_clients - 1) * ETH_ALEN); + os_memcpy(s->p2p_client_list + + (s->num_p2p_clients - 1) * ETH_ALEN, + addr, ETH_ALEN); } #ifndef CONFIG_NO_CONFIG_WRITE