Переглянути джерело

qcacmn: Add sanity check before pointer dereferenced

Add sanity check before pointer dereferenced in wifi_pos APIs.

Change-Id: Ib12bab1d7bfbe20689148274941f3c0d86f256c6
CRs-Fixed: 2370311
Qun Zhang 6 роки тому
батько
коміт
80cc5ab546
1 змінених файлів з 50 додано та 0 видалено
  1. 50 0
      umac/wifi_pos/src/wifi_pos_api.c

+ 50 - 0
umac/wifi_pos/src/wifi_pos_api.c

@@ -114,6 +114,11 @@ void wifi_pos_set_oem_target_type(struct wlan_objmgr_psoc *psoc, uint32_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->oem_target_type = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -124,6 +129,11 @@ void wifi_pos_set_oem_fw_version(struct wlan_objmgr_psoc *psoc, uint32_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->oem_fw_version = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -134,6 +144,11 @@ void wifi_pos_set_drv_ver_major(struct wlan_objmgr_psoc *psoc, uint8_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->driver_version.major = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -144,6 +159,11 @@ void wifi_pos_set_drv_ver_minor(struct wlan_objmgr_psoc *psoc, uint8_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->driver_version.minor = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -154,6 +174,11 @@ void wifi_pos_set_drv_ver_patch(struct wlan_objmgr_psoc *psoc, uint8_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->driver_version.patch = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -164,6 +189,11 @@ void wifi_pos_set_drv_ver_build(struct wlan_objmgr_psoc *psoc, uint8_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->driver_version.build = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -174,6 +204,11 @@ void wifi_pos_set_dwell_time_min(struct wlan_objmgr_psoc *psoc, uint16_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->allowed_dwell_time_min = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -183,6 +218,11 @@ void wifi_pos_set_dwell_time_max(struct wlan_objmgr_psoc *psoc, uint16_t val)
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->allowed_dwell_time_max = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -194,6 +234,11 @@ void wifi_pos_set_current_dwell_time_max(struct wlan_objmgr_psoc *psoc,
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->current_dwell_time_max = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
@@ -205,6 +250,11 @@ void wifi_pos_set_current_dwell_time_min(struct wlan_objmgr_psoc *psoc,
 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
 			wifi_pos_get_psoc_priv_obj(psoc);
 
+	if (!wifi_pos_psoc) {
+		wifi_pos_err("wifi_pos priv obj is null");
+		return;
+	}
+
 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
 	wifi_pos_psoc->current_dwell_time_max = val;
 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);