qcacld-3.0: Fix tdls vdev ref issue for race condition

When wpa_supplicant sent tdls mgmt frame during sta disconnecting for NUD
failure, scheduler thread clear MLO flag of vdev0, in
wlan_key_get_link_vdev, wlan_vdev_mlme_is_mlo_vdev(vdev0) return true,
in wlan_key_put_link_vdev, wlan_vdev_mlme_is_mlo_vdev(vdev0) return false,
WLAN_OSIF_TDLS_ID vdev ref count is released in both
wlan_key_get_link_vdev and wlan_key_put_link_vdev, while WLAN_MLO_MGR_ID
vdev ref count isn't released, assert will happen.

To fix it, add check in os_if, if vdev not up, reject tdls frame to
avoid such race condition issue.

Change-Id: I90e60c95888cc63e57d0bd0b75c570d8d677cbaa
CRs-Fixed: 3572133
Este commit está contenido en:
Jianmin Zhu
2023-07-27 08:05:16 -07:00
cometido por Rahul Choudhary
padre 9618136de3
commit 263d0d2296

Ver fichero

@@ -1225,6 +1225,13 @@ wlan_cfg80211_tdls_mgmt_mlo(struct hdd_adapter *adapter, const uint8_t *peer,
if (!vdev)
return -EINVAL;
/* STA should be connected before sending any TDLS frame */
if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) {
osif_err("STA is not connected");
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_TDLS_ID);
return -EAGAIN;
}
is_mlo_vdev = wlan_vdev_mlme_is_mlo_vdev(vdev);
if (is_mlo_vdev) {
tdls_link_vdev =