cfg80211: pass the last_request to __set_regdom()
authorLuis R. Rodriguez <mcgrof@do-not-panic.com>
Tue, 5 Nov 2013 17:18:13 +0000 (09:18 -0800)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 25 Nov 2013 19:51:28 +0000 (20:51 +0100)
last_request is RCU protected, since we're getting it
on set_regdom() we might as well pass it to ensure the
same request is being processed, otherwise there is a
small race it could have changed. This makes processing
of the request atomic.

Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/reg.c

index 38c252f91086ab4721fb631f19cfc71ea6a1dfca..ca11f31b3bec2bfa39600aab6c91756967108c12 100644 (file)
@@ -2192,12 +2192,12 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
 }
 
 /* Takes ownership of rd only if it doesn't fail */
-static int __set_regdom(const struct ieee80211_regdomain *rd)
+static int __set_regdom(const struct ieee80211_regdomain *rd,
+                       struct regulatory_request *lr)
 {
        const struct ieee80211_regdomain *regd;
        const struct ieee80211_regdomain *intersected_rd = NULL;
        struct wiphy *request_wiphy;
-       struct regulatory_request *lr = get_last_request();
 
        /* Some basic sanity checks first */
 
@@ -2323,7 +2323,7 @@ int set_regdom(const struct ieee80211_regdomain *rd)
        lr = get_last_request();
 
        /* Note that this doesn't update the wiphys, this is done below */
-       r = __set_regdom(rd);
+       r = __set_regdom(rd, lr);
        if (r) {
                if (r == -EALREADY)
                        reg_set_request_processed();