From edd5939a26da9860f65e195bca730f8687e9d3e8 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 17 Jan 2015 01:39:34 +0200 Subject: [PATCH] Interworking: Start ANQP fetch from eloop callback Reduce maximum stack use by starting next ANQP fetch operation from an eloop callback rather than calling interworking_next_anqp_fetch() directly from interworking_start_fetch_anqp(). This avoids issues that could potentially make the process run out of stack if long loops of ANQP operations are executed in cases where automatic Interworking network selection is used and scan results do not have a full match for a network. Signed-off-by: Jouni Malinen --- wpa_supplicant/interworking.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wpa_supplicant/interworking.c b/wpa_supplicant/interworking.c index 116df0528..27c456118 100644 --- a/wpa_supplicant/interworking.c +++ b/wpa_supplicant/interworking.c @@ -2556,7 +2556,12 @@ void interworking_start_fetch_anqp(struct wpa_supplicant *wpa_s) bss->flags &= ~WPA_BSS_ANQP_FETCH_TRIED; wpa_s->fetch_anqp_in_progress = 1; - interworking_next_anqp_fetch(wpa_s); + + /* + * Start actual ANQP operation from eloop call to make sure the loop + * does not end up using excessive recursion. + */ + eloop_register_timeout(0, 0, interworking_continue_anqp, wpa_s, NULL); }