aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2012-08-23 21:23:44 (GMT)
committerJouni Malinen <j@w1.fi>2012-08-23 21:25:14 (GMT)
commitb4a5dfa95da694e3f2bf1f635e3c039c726e65b9 (patch)
tree9f8fe10d8c33ac1bad8b5ad300e12c8ec3301cd6 /wpa_supplicant
parent223167956cee676fae65de5a4cbd7fb6aa0482ca (diff)
downloadhostap-b4a5dfa95da694e3f2bf1f635e3c039c726e65b9.zip
hostap-b4a5dfa95da694e3f2bf1f635e3c039c726e65b9.tar.gz
hostap-b4a5dfa95da694e3f2bf1f635e3c039c726e65b9.tar.bz2
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 <jouni@qca.qualcomm.com> intended-for: hostap-1
Diffstat (limited to 'wpa_supplicant')
-rw-r--r--wpa_supplicant/config_ssid.h4
-rw-r--r--wpa_supplicant/p2p_supplicant.c11
2 files changed, 14 insertions, 1 deletions
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
index 476a984..232c9c0 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 cf4b3f2..32b7b44 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