File tree Expand file tree Collapse file tree 1 file changed +14
-2
lines changed Expand file tree Collapse file tree 1 file changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -334,6 +334,7 @@ void cfg80211_pmsr_complete(struct wireless_dev *wdev,
334
334
gfp_t gfp )
335
335
{
336
336
struct cfg80211_registered_device * rdev = wiphy_to_rdev (wdev -> wiphy );
337
+ struct cfg80211_pmsr_request * tmp , * prev , * to_free = NULL ;
337
338
struct sk_buff * msg ;
338
339
void * hdr ;
339
340
@@ -364,9 +365,20 @@ void cfg80211_pmsr_complete(struct wireless_dev *wdev,
364
365
nlmsg_free (msg );
365
366
free_request :
366
367
spin_lock_bh (& wdev -> pmsr_lock );
367
- list_del (& req -> list );
368
+ /*
369
+ * cfg80211_pmsr_process_abort() may have already moved this request
370
+ * to the free list, and will free it later. In this case, don't free
371
+ * it here.
372
+ */
373
+ list_for_each_entry_safe (tmp , prev , & wdev -> pmsr_list , list ) {
374
+ if (tmp == req ) {
375
+ list_del (& req -> list );
376
+ to_free = req ;
377
+ break ;
378
+ }
379
+ }
368
380
spin_unlock_bh (& wdev -> pmsr_lock );
369
- kfree (req );
381
+ kfree (to_free );
370
382
}
371
383
EXPORT_SYMBOL_GPL (cfg80211_pmsr_complete );
372
384
You can’t perform that action at this time.
0 commit comments