WPS ER: Fix Enrollee entry freeing on timeout
authorJouni Malinen <j@w1.fi>
Fri, 20 Nov 2009 19:56:39 +0000 (21:56 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 20 Nov 2009 19:56:39 +0000 (21:56 +0200)
Must unlink the entry first before trying to remove it to avoid
leaving behind pointers to freed memory.

src/wps/wps_er.c

index 2887f04..4a6e6f7 100644 (file)
@@ -676,8 +676,22 @@ static void wps_er_http_resp_ok(struct http_request *req)
 
 static void wps_er_sta_timeout(void *eloop_data, void *user_ctx)
 {
-       struct wps_er_sta *sta = eloop_data;
+       struct wps_er_sta *prev, *tmp, *sta = eloop_data;
        wpa_printf(MSG_DEBUG, "WPS ER: STA entry timed out");
+       tmp = sta->ap->sta;
+       prev = NULL;
+       while (tmp) {
+               if (tmp == sta)
+                       break;
+               prev = tmp;
+               tmp = tmp->next;
+       }
+       if (tmp) {
+               if (prev)
+                       prev->next = sta->next;
+               else
+                       sta->ap->sta = sta->next;
+       }
        wps_er_sta_free(sta);
 }