|
@@ -5357,6 +5357,7 @@ void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta)
|
|
|
uint8_t oper_mode = BSS_OPERATIONAL_MODE_STA;
|
|
|
void *htc_handle;
|
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
+ uint8_t vdev_id = add_sta->smesessionId;
|
|
|
|
|
|
htc_handle = lmac_get_htc_hdl(wma->psoc);
|
|
|
if (!htc_handle) {
|
|
@@ -5364,13 +5365,13 @@ void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- wma_debug("Vdev %d BSSID "QDF_MAC_ADDR_FMT, add_sta->smesessionId,
|
|
|
+ wma_debug("Vdev %d BSSID "QDF_MAC_ADDR_FMT, vdev_id,
|
|
|
QDF_MAC_ADDR_REF(add_sta->bssId));
|
|
|
|
|
|
- if (wma_is_vdev_in_ap_mode(wma, add_sta->smesessionId))
|
|
|
+ if (wma_is_vdev_in_ap_mode(wma, vdev_id))
|
|
|
oper_mode = BSS_OPERATIONAL_MODE_AP;
|
|
|
|
|
|
- if (WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, add_sta->smesessionId))
|
|
|
+ if (WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, vdev_id))
|
|
|
oper_mode = BSS_OPERATIONAL_MODE_NDI;
|
|
|
switch (oper_mode) {
|
|
|
case BSS_OPERATIONAL_MODE_STA:
|
|
@@ -5381,12 +5382,17 @@ void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta)
|
|
|
wma_add_sta_req_ap_mode(wma, add_sta);
|
|
|
break;
|
|
|
case BSS_OPERATIONAL_MODE_NDI:
|
|
|
- status = wma_add_sta_ndi_mode(wma, add_sta);
|
|
|
+ wma_add_sta_ndi_mode(wma, add_sta);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * not use add_sta after this to avoid use after free
|
|
|
+ * as it maybe freed.
|
|
|
+ */
|
|
|
+
|
|
|
/* handle wow for sap with 1 or more peer in same way */
|
|
|
- if (wma_is_vdev_in_sap_mode(wma, add_sta->smesessionId)) {
|
|
|
+ if (wma_is_vdev_in_sap_mode(wma, vdev_id)) {
|
|
|
bool is_bus_suspend_allowed_in_sap_mode =
|
|
|
(wlan_pmo_get_sap_mode_bus_suspend(wma->psoc) &&
|
|
|
wmi_service_enabled(wma->wmi_handle,
|
|
@@ -5404,7 +5410,7 @@ void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta)
|
|
|
}
|
|
|
|
|
|
/* handle wow for p2pgo with 1 or more peer in same way */
|
|
|
- if (wma_is_vdev_in_go_mode(wma, add_sta->smesessionId)) {
|
|
|
+ if (wma_is_vdev_in_go_mode(wma, vdev_id)) {
|
|
|
bool is_bus_suspend_allowed_in_go_mode =
|
|
|
(wlan_pmo_get_go_mode_bus_suspend(wma->psoc) &&
|
|
|
wmi_service_enabled(wma->wmi_handle,
|