cfg80211: protect first access of last_request on 11d hint under mutex
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Sat, 21 Feb 2009 05:04:27 +0000 (00:04 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 27 Feb 2009 19:52:56 +0000 (14:52 -0500)
We were not protecting last_request there is a small possible race
between an 11d hint and another routine which calls reset_regdomains()
which can prevent a valid country IE from being processed. This is
not critical as it will still be procesed soon after but locking prior
to it is correct.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/reg.c

index d44f3b5481ad39b32fcd1b12d852642d294a6cac..b47445219a48dc908454bc564122eab35b4bd8ac 100644 (file)
@@ -1261,11 +1261,13 @@ void regulatory_hint_11d(struct wiphy *wiphy,
        u32 checksum = 0;
        enum environment_cap env = ENVIRON_ANY;
 
-       if (!last_request)
-               return;
-
        mutex_lock(&cfg80211_mutex);
 
+       if (unlikely(!last_request)) {
+               mutex_unlock(&cfg80211_mutex);
+               return;
+       }
+
        /* IE len must be evenly divisible by 2 */
        if (country_ie_len & 0x01)
                goto out;