From 80cc5ab54661497079f2c0609e7c01e0748956c3 Mon Sep 17 00:00:00 2001 From: Qun Zhang Date: Thu, 20 Dec 2018 10:31:50 +0800 Subject: [PATCH] qcacmn: Add sanity check before pointer dereferenced Add sanity check before pointer dereferenced in wifi_pos APIs. Change-Id: Ib12bab1d7bfbe20689148274941f3c0d86f256c6 CRs-Fixed: 2370311 --- umac/wifi_pos/src/wifi_pos_api.c | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/umac/wifi_pos/src/wifi_pos_api.c b/umac/wifi_pos/src/wifi_pos_api.c index 9f992de06980..b465b2a1fccd 100644 --- a/umac/wifi_pos/src/wifi_pos_api.c +++ b/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);