]> git.baikalelectronics.ru Git - kernel.git/commit
cfg80211: fix scan done race
authorJohannes Berg <johannes.berg@intel.com>
Wed, 22 Jan 2014 09:14:18 +0000 (11:14 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 6 Feb 2014 08:55:19 +0000 (09:55 +0100)
commit0ad33a3f2e7e1a605b49f80338270e121828b45d
tree823c1fcd1eee75b502a5ac2181481841a702778b
parent6d02134a2b5cf10ed46d4a31d86117227e9b20f8
cfg80211: fix scan done race

When an interface/wdev is removed, any ongoing scan should be
cancelled by the driver. This will make it call cfg80211, which
only queues a work struct. If interface/wdev removal is quick
enough, this can leave the scan request pending and processed
only after the interface is gone, causing a use-after-free.

Fix this by making sure the scan request is not pending after
the interface is destroyed. We can't flush or cancel the work
item due to locking concerns, but when it'll run it shouldn't
find anything to do. This leaves a potential issue, if a new
scan gets requested before the work runs, it prematurely stops
the running scan, potentially causing another crash. I'll fix
that in the next patch.

This was particularly observed with P2P_DEVICE wdevs, likely
because freeing them is quicker than freeing netdevs.

Reported-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Fixes: 3828fea95c0e ("cfg80211: don't "leak" uncompleted scans")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/core.c