Browse Source

qcacld-3.0: fix use-after-free in hdd_put_sta_info_ref

sta_info ref is wrongly put in function
hdd_get_cached_station_remote. Modify the typo code
to correct the issue.

Change-Id: Ia0de774603c1570598848f7d699a128a5da6d8f0
CRs-Fixed: 2692694
Paul Zhang 4 years ago
parent
commit
3f43118702
2 changed files with 3 additions and 3 deletions
  1. 2 2
      core/hdd/src/wlan_hdd_hostapd.c
  2. 1 1
      core/hdd/src/wlan_hdd_station_info.c

+ 2 - 2
core/hdd/src/wlan_hdd_hostapd.c

@@ -2419,8 +2419,8 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 					  WMA_DHCP_STOP_IND);
 		stainfo->dhcp_nego_status = DHCP_NEGO_STOP;
 
-		hdd_put_sta_info_ref(&adapter->sta_info_list, &stainfo, true);
 		hdd_softap_deregister_sta(adapter, &stainfo);
+		hdd_put_sta_info_ref(&adapter->sta_info_list, &stainfo, true);
 
 		ap_ctx->ap_active = false;
 
@@ -6805,13 +6805,13 @@ void hdd_sap_indicate_disconnect_for_sta(struct hdd_adapter *adapter)
 		qdf_mem_copy(
 		     &sap_event.sapevt.sapStationDisassocCompleteEvent.staMac,
 		     &sta_info->sta_mac, sizeof(struct qdf_mac_addr));
+		hdd_put_sta_info_ref(&adapter->sta_info_list, &sta_info, true);
 
 		sap_event.sapevt.sapStationDisassocCompleteEvent.reason =
 				eSAP_MAC_INITATED_DISASSOC;
 		sap_event.sapevt.sapStationDisassocCompleteEvent.status_code =
 				QDF_STATUS_E_RESOURCES;
 		hdd_hostapd_sap_event_cb(&sap_event, sap_ctx->user_context);
-		hdd_put_sta_info_ref(&adapter->sta_info_list, &sta_info, true);
 	}
 
 	hdd_exit();

+ 1 - 1
core/hdd/src/wlan_hdd_station_info.c

@@ -1178,7 +1178,7 @@ static int hdd_get_cached_station_remote(struct hdd_context *hdd_ctx,
 		}
 	}
 	hdd_sta_info_detach(&adapter->cache_sta_info_list, &stainfo);
-	hdd_put_sta_info_ref(&adapter->sta_info_list, &stainfo, true);
+	hdd_put_sta_info_ref(&adapter->cache_sta_info_list, &stainfo, true);
 	qdf_atomic_dec(&adapter->cache_sta_count);
 
 	return cfg80211_vendor_cmd_reply(skb);