diff mbox series

[2/5] cfg80211: Properly track transmitting and non-transmitting BSS

Message ID 1544184650-14124-2-git-send-email-jouni@codeaurora.org (mailing list archive)
State Superseded
Delegated to: Johannes Berg
Headers show
Series [1/5] cfg80211: Parsing of Multiple BSSID information in scanning | expand

Commit Message

Jouni Malinen Dec. 7, 2018, 12:10 p.m. UTC
From: Sara Sharon <sara.sharon@intel.com>

When holding data of the non-transmitting BSS, we need to keep the
transmitting BSS data on. Otherwise it will be released, and release
the non-transmitting BSS with it.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
---
 net/wireless/core.h |  9 +++++++++
 net/wireless/scan.c | 36 ++++++++++++++++++++++++++++++++++--
 2 files changed, 43 insertions(+), 2 deletions(-)

Comments

kernel test robot Dec. 7, 2018, 9:10 p.m. UTC | #1
Hi Sara,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on mac80211-next/master]
[also build test ERROR on v4.20-rc5 next-20181207]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Jouni-Malinen/cfg80211-Parsing-of-Multiple-BSSID-information-in-scanning/20181208-040803
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: i386-randconfig-x011-201848 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   In file included from net/wireless/nl80211.h:9:0,
                    from net/wireless/ibss.c:14:
   net/wireless/core.h: In function 'cfg80211_hold_bss':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
   net/wireless/core.h: In function 'cfg80211_unhold_bss':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function '__cfg80211_clear_ibss.constprop':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function '__cfg80211_ibss_joined':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
--
   In file included from net/wireless/nl80211.h:9:0,
                    from net/wireless/sme.c:21:
   net/wireless/core.h: In function 'cfg80211_hold_bss':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
   net/wireless/core.h: In function 'cfg80211_unhold_bss':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function '__cfg80211_connect_result':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_connect_done':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
   net/wireless/core.h: In function '__cfg80211_roamed':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
   net/wireless/core.h: In function '__cfg80211_disconnected':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_connect':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
--
   In file included from net/wireless/nl80211.h:9:0,
                    from net/wireless/core.c:26:
   net/wireless/core.h: In function 'cfg80211_unhold_bss':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_netdev_notifier_call':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
--
   In file included from net/wireless/mlme.c:18:0:
   net/wireless/core.h: In function 'cfg80211_hold_bss':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~
   net/wireless/core.h: In function 'cfg80211_unhold_bss':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_rx_assoc_resp':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_assoc_timeout':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_abandon_assoc':
>> net/wireless/core.h:193:20: error: inlining failed in call to always_inline 'cfg80211_unhold_bss': recursive inlining
    static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~~~
   net/wireless/core.h:198:3: note: called from here
      cfg80211_unhold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           struct cfg80211_internal_bss,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           pub));
           ~~~~~
   net/wireless/core.h: In function 'cfg80211_mlme_assoc':
>> net/wireless/core.h:184:20: error: inlining failed in call to always_inline 'cfg80211_hold_bss': recursive inlining
    static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
                       ^~~~~~~~~~~~~~~~~
   net/wireless/core.h:188:3: note: called from here
      cfg80211_hold_bss(container_of(bss->transmitted_bss,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                struct cfg80211_internal_bss,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                pub));
                ~~~~~

vim +/cfg80211_hold_bss +184 net/wireless/core.h

19957bb3 Johannes Berg 2009-07-02  183  
19957bb3 Johannes Berg 2009-07-02 @184  static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
19957bb3 Johannes Berg 2009-07-02  185  {
19957bb3 Johannes Berg 2009-07-02  186  	atomic_inc(&bss->hold);
ac02934e Sara Sharon   2018-12-07  187  	if (bss->transmitted_bss)
ac02934e Sara Sharon   2018-12-07 @188  		cfg80211_hold_bss(container_of(bss->transmitted_bss,
ac02934e Sara Sharon   2018-12-07  189  					       struct cfg80211_internal_bss,
ac02934e Sara Sharon   2018-12-07  190  					       pub));
19957bb3 Johannes Berg 2009-07-02  191  }
19957bb3 Johannes Berg 2009-07-02  192  
19957bb3 Johannes Berg 2009-07-02 @193  static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
19957bb3 Johannes Berg 2009-07-02  194  {
19957bb3 Johannes Berg 2009-07-02  195  	int r = atomic_dec_return(&bss->hold);
19957bb3 Johannes Berg 2009-07-02  196  	WARN_ON(r < 0);
ac02934e Sara Sharon   2018-12-07  197  	if (bss->transmitted_bss)
ac02934e Sara Sharon   2018-12-07  198  		cfg80211_unhold_bss(container_of(bss->transmitted_bss,
ac02934e Sara Sharon   2018-12-07  199  						 struct cfg80211_internal_bss,
ac02934e Sara Sharon   2018-12-07  200  						 pub));
19957bb3 Johannes Berg 2009-07-02  201  }
19957bb3 Johannes Berg 2009-07-02  202  

:::::: The code at line 184 was first introduced by commit
:::::: 19957bb399e2722719c0e20c9ae91cf8b6aaff04 cfg80211: keep track of BSSes

:::::: TO: Johannes Berg <johannes@sipsolutions.net>
:::::: CC: John W. Linville <linville@tuxdriver.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox series

Patch

diff --git a/net/wireless/core.h b/net/wireless/core.h
index d58c56a..b1afc4b 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -153,6 +153,7 @@  struct cfg80211_internal_bss {
 	struct list_head list;
 	struct list_head hidden_list;
 	struct list_head nontrans_list;
+	struct cfg80211_bss *transmitted_bss;
 	struct rb_node rbn;
 	u64 ts_boottime;
 	unsigned long ts;
@@ -183,12 +184,20 @@  static inline struct cfg80211_internal_bss *bss_from_pub(struct cfg80211_bss *pu
 static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
 {
 	atomic_inc(&bss->hold);
+	if (bss->transmitted_bss)
+		cfg80211_hold_bss(container_of(bss->transmitted_bss,
+					       struct cfg80211_internal_bss,
+					       pub));
 }
 
 static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
 {
 	int r = atomic_dec_return(&bss->hold);
 	WARN_ON(r < 0);
+	if (bss->transmitted_bss)
+		cfg80211_unhold_bss(container_of(bss->transmitted_bss,
+						 struct cfg80211_internal_bss,
+						 pub));
 }
 
 
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 559f56d..6f2fed2 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -109,6 +109,12 @@  static inline void bss_ref_get(struct cfg80211_registered_device *rdev,
 				   pub);
 		bss->refcount++;
 	}
+	if (bss->transmitted_bss) {
+		bss = container_of(bss->transmitted_bss,
+				   struct cfg80211_internal_bss,
+				   pub);
+		bss->refcount++;
+	}
 }
 
 static inline void bss_ref_put(struct cfg80211_registered_device *rdev,
@@ -125,6 +131,18 @@  static inline void bss_ref_put(struct cfg80211_registered_device *rdev,
 		if (hbss->refcount == 0)
 			bss_free(hbss);
 	}
+
+	if (bss->transmitted_bss) {
+		struct cfg80211_internal_bss *tbss;
+
+		tbss = container_of(bss->transmitted_bss,
+				    struct cfg80211_internal_bss,
+				    pub);
+		tbss->refcount--;
+		if (tbss->refcount == 0)
+			bss_free(tbss);
+	}
+
 	bss->refcount--;
 	if (bss->refcount == 0)
 		bss_free(bss);
@@ -1028,6 +1046,7 @@  static bool cfg80211_combine_bsses(struct cfg80211_registered_device *rdev,
 static struct cfg80211_internal_bss *
 cfg80211_bss_update(struct cfg80211_registered_device *rdev,
 		    struct cfg80211_internal_bss *tmp,
+		    struct cfg80211_bss *trans_bss,
 		    bool signal_valid)
 {
 	struct cfg80211_internal_bss *found = NULL;
@@ -1184,6 +1203,17 @@  cfg80211_bss_update(struct cfg80211_registered_device *rdev,
 			goto drop;
 		}
 
+		/* This must be before the call to bss_ref_get */
+		if (trans_bss) {
+			struct cfg80211_internal_bss *pbss =
+				container_of(trans_bss,
+					     struct cfg80211_internal_bss,
+					     pub);
+
+			new->transmitted_bss = trans_bss;
+			bss_ref_get(rdev, pbss);
+		}
+
 		list_add_tail(&new->list, &rdev->bss_list);
 		rdev->bss_entries++;
 		rb_insert_bss(rdev, new);
@@ -1339,7 +1369,8 @@  cfg80211_inform_single_bss_data(struct wiphy *wiphy,
 
 	signal_valid = abs(data->chan->center_freq - channel->center_freq) <=
 		wiphy->max_adj_channel_rssi_comp;
-	res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, signal_valid);
+	res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, trans_bss,
+				  signal_valid);
 	if (!res)
 		return NULL;
 
@@ -1657,7 +1688,8 @@  cfg80211_inform_single_bss_frame_data(struct wiphy *wiphy,
 
 	signal_valid = abs(data->chan->center_freq - channel->center_freq) <=
 		wiphy->max_adj_channel_rssi_comp;
-	res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, signal_valid);
+	res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, trans_bss,
+				  signal_valid);
 	if (!res)
 		return NULL;