OSDN Git Service

cfg80211: Pass lockdep expression to RCU lists
authorAmol Grover <frextrite@gmail.com>
Wed, 19 Feb 2020 09:11:04 +0000 (14:41 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 21 Feb 2020 11:11:30 +0000 (12:11 +0100)
rdev->sched_scan_req_list maybe traversed using list_for_each_entry_rcu
outside an RCU read-side critical section but under the protection
of rtnl_mutex.

Hence, add corresponding lockdep expression to silence false-positive
warnings, and harden RCU lists.

Signed-off-by: Amol Grover <frextrite@gmail.com>
Link: https://lore.kernel.org/r/20200219091102.10709-1-frextrite@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/scan.c

index aef240f..7f1af8f 100644 (file)
@@ -556,9 +556,8 @@ cfg80211_find_sched_scan_req(struct cfg80211_registered_device *rdev, u64 reqid)
 {
        struct cfg80211_sched_scan_request *pos;
 
-       WARN_ON_ONCE(!rcu_read_lock_held() && !lockdep_rtnl_is_held());
-
-       list_for_each_entry_rcu(pos, &rdev->sched_scan_req_list, list) {
+       list_for_each_entry_rcu(pos, &rdev->sched_scan_req_list, list,
+                               lockdep_rtnl_is_held()) {
                if (pos->reqid == reqid)
                        return pos;
        }