The incorrect assumption is the last regulatory request
(last_request) is always a country IE when processing
country IEs. Although this is true 99% of the time the
first time this happens this could not be true.
This fixes an oops in the branch check for the last_request
when accessing drv_last_ie. The access was done under the
assumption the struct won't be null.
Note to stable: to port to 29 replace as follows, only 29 has
country IE code:
s|NL80211_REGDOM_SET_BY_COUNTRY_IE|REGDOM_SET_BY_COUNTRY_IE
Cc: stable@kernel.org
Reported-by: Quentin Armitage <Quentin@armitage.org.uk>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
 
        assert_cfg80211_lock();
 
+       if (unlikely(last_request->initiator !=
+           NL80211_REGDOM_SET_BY_COUNTRY_IE))
+               return false;
+
        request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx);
 
        if (!request_wiphy)
         * we optimize an early check to exit out early if we don't have to
         * do anything
         */
-       if (likely(wiphy_idx_valid(last_request->wiphy_idx))) {
+       if (likely(last_request->initiator ==
+           NL80211_REGDOM_SET_BY_COUNTRY_IE &&
+           wiphy_idx_valid(last_request->wiphy_idx))) {
                struct cfg80211_registered_device *drv_last_ie;
 
                drv_last_ie =