hostap: Do not free priv until timer handler has actually stopped using it
authorKirill Tkhai <[email protected]>
Fri, 14 Feb 2014 12:17:49 +0000 (16:17 +0400)
committerJohn W. Linville <[email protected]>
Thu, 20 Feb 2014 20:49:07 +0000 (15:49 -0500)
Function del_timer() does not guarantee that timer was really deleted.
If the timer handler is beeing executed at the moment, the function
does nothing. So, it's possible to use already freed memory in the handler:

[ref: Documentation/DocBook/kernel-locking.tmpl]

This was found using grep and compile-tested only. Please, consider
applying or something similar to it.

Signed-off-by: Kirill Tkhai <[email protected]>
CC: Jouni Malinen <[email protected]>
CC: John W. Linville <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
drivers/net/wireless/hostap/hostap_ap.c

index d36e252d2ccbc0041a5b0c1669fe396c2c18db73..596525528f50504afe3005d98ac0ab47d3e26453 100644 (file)
@@ -147,7 +147,7 @@ static void ap_free_sta(struct ap_data *ap, struct sta_info *sta)
 
        if (!sta->ap && sta->u.sta.challenge)
                kfree(sta->u.sta.challenge);
-       del_timer(&sta->timer);
+       del_timer_sync(&sta->timer);
 #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */
 
        kfree(sta);