summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajesh Chauhan <rajeshc@qca.qualcomm.com>2014-01-15 16:02:07 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-26 20:08:20 -0800
commit4aa07c11c4b695ea0a80f4b5f02711d785fbf155 (patch)
tree2f35fe286fbc16f2337216f89dc2678240fb031d
parentda6be59ba625ecc54692edd3f2591241210f4e8d (diff)
qcalcd: Fix static analysis issue in HDD files
Fix static analysis issues reported in following HDD files: - wlan_hdd_assoc.c - wlan_hdd_cfg80211.c - wlan_hdd_ftm.c - wlan_hdd_hostapd.c - wlan_hdd_softap_tx_rx.c CRs-Fixed: 601529 Change-Id: Iabd518cf9d470fa64819723ea67e4c49e9ace36f
-rw-r--r--CORE/HDD/inc/wlan_hdd_hostapd.h3
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c40
-rw-r--r--CORE/HDD/src/wlan_hdd_ftm.c27
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c31
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c2
6 files changed, 107 insertions, 11 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_hostapd.h b/CORE/HDD/inc/wlan_hdd_hostapd.h
index cae765a4ca35..d6eb719306a4 100644
--- a/CORE/HDD/inc/wlan_hdd_hostapd.h
+++ b/CORE/HDD/inc/wlan_hdd_hostapd.h
@@ -51,6 +51,9 @@
Preprocessor definitions and constants
-------------------------------------------------------------------------*/
+/* max length of command string in hostapd ioctl */
+#define HOSTAPD_IOCTL_COMMAND_STRLEN_MAX 2048
+
hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAddr, tANI_U8 *name);
VOS_STATUS hdd_register_hostapd(hdd_adapter_t *pAdapter, tANI_U8 rtnl_held);
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index d0e0c906ae6d..be1a9f3f2b50 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -2252,8 +2252,10 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter,
{
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
#ifdef QCA_WIFI_2_0
+#ifdef CONFIG_TDLS_IMPLICIT
tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
#endif
+#endif
eHalStatus status = eHAL_STATUS_FAILURE ;
tANI_U8 staIdx;
@@ -2280,6 +2282,19 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter,
pRoamInfo->peerMac[4],
pRoamInfo->peerMac[5]) ;
#endif
+
+#ifdef QCA_WIFI_2_0
+#ifdef CONFIG_TDLS_IMPLICIT
+ if (!pHddTdlsCtx)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: TDLS ctx is null, ignore roamResult (%d)",
+ __func__, roamResult);
+ return status;
+ }
+#endif
+#endif
+
switch( roamResult )
{
case eCSR_ROAM_RESULT_ADD_TDLS_PEER:
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 8facceb8c21a..091ec04f4897 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2748,7 +2748,7 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy,
{
struct wireless_dev *wdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev );
- hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter );
+ hdd_context_t *pHddCtx;
hdd_adapter_t *pP2pAdapter = NULL;
tCsrRoamProfile *pRoamProfile = NULL;
eCsrRoamBssType LastBSSType;
@@ -2758,6 +2758,21 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy,
ENTER();
+ if (!pAdapter)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Adapter context is null", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ pHddCtx = WLAN_HDD_GET_CTX( pAdapter );
+ if (!pHddCtx)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: HDD context is null", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
status = wlan_hdd_validate_context(pHddCtx);
if (0 != status)
@@ -2800,6 +2815,12 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy,
)
{
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
+ if (!pWextState)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWextState is null", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
pRoamProfile = &pWextState->roamProfile;
LastBSSType = pRoamProfile->BSSType;
@@ -6275,16 +6296,29 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy,
int status;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev );
VOS_STATUS exitbmpsStatus = VOS_STATUS_E_INVAL;
- hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ hdd_context_t *pHddCtx;
ENTER();
+ if (!pAdapter)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Adapter context is null", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
hddLog(VOS_TRACE_LEVEL_INFO,
"%s: device_mode = %d\n",__func__,pAdapter->device_mode);
pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
- status = wlan_hdd_validate_context(pHddCtx);
+ if (!pHddCtx)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: HDD context is null", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+ status = wlan_hdd_validate_context(pHddCtx);
if (0 != status)
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index 9bcf52d99110..e5c3799071fc 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -435,6 +435,10 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex
#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM)
adf_os_device_t adf_ctx;
HTC_INIT_INFO htcInfo;
+#ifndef QCA_WIFI_ISOC
+ v_PVOID_t pHifContext = NULL;
+ v_PVOID_t pHtcContext = NULL;
+#endif
#endif
hdd_context_t *pHddCtx;
@@ -503,7 +507,15 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex
#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM)
#ifndef QCA_WIFI_ISOC
/* Initialize BMI and Download firmware */
- if (bmi_download_firmware(vos_get_context(VOS_MODULE_ID_HIF, gpVosContext))) {
+ pHifContext = vos_get_context(VOS_MODULE_ID_HIF, gpVosContext);
+ if (!pHifContext)
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+ "%s: failed to get HIF context", __func__);
+ goto err_sched_close;
+ }
+
+ if (bmi_download_firmware(pHifContext)) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
"%s: BMI failed to download target", __func__);
goto err_bmi_close;
@@ -526,7 +538,7 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex
}
#ifndef QCA_WIFI_ISOC
- if (bmi_done(vos_get_context(VOS_MODULE_ID_HIF, gpVosContext))) {
+ if (bmi_done(pHifContext)) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
"%s: Failed to complete BMI phase", __func__);
goto err_htc_close;
@@ -582,7 +594,14 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex
#if defined (QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) \
&& !defined (QCA_WIFI_ISOC)
- if (HTCWaitTarget(vos_get_context(VOS_MODULE_ID_HTC, gpVosContext))) {
+ pHtcContext = vos_get_context(VOS_MODULE_ID_HTC, gpVosContext);
+ if (!pHtcContext)
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+ "%s: failed to get HTC context", __func__);
+ goto err_wda_close;
+ }
+ if (HTCWaitTarget(pHtcContext)) {
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
"%s: Failed to complete BMI phase", __func__);
goto err_wda_close;
@@ -676,7 +695,7 @@ err_htc_close:
#ifndef QCA_WIFI_ISOC
err_bmi_close:
- BMICleanup(vos_get_context(VOS_MODULE_ID_HIF, gpVosContext));
+ BMICleanup(pHifContext);
#endif /* #ifndef QCA_WIFI_ISOC */
#endif /* #QCA_WIFI_2_0 && QCA_WIFI_FTM */
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 9fc88280c2dd..869b58f76386 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -230,7 +230,7 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
}
if (priv_data.total_len <= 0 ||
- priv_data.total_len == INT_MAX)
+ priv_data.total_len > HOSTAPD_IOCTL_COMMAND_STRLEN_MAX)
{
/* below we allocate one more byte for command buffer.
* To avoid addition overflow total_len should be
@@ -1042,13 +1042,37 @@ static iw_softap_setparam(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev));
- tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter);
+ tHalHandle hHal;
int *value = (int *)extra;
int sub_cmd = value[0];
int set_value = value[1];
eHalStatus status;
int ret = 0; /* success */
- v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext;
+ v_CONTEXT_t pVosContext;
+
+ if (!pHostapdAdapter || !pHostapdAdapter->pHddCtx)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: either hostapd Adapter is null or HDD ctx is null",
+ __func__);
+ return -1;
+ }
+
+ hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter);
+ if (!hHal)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Hal ctx is null", __func__);
+ return -1;
+ }
+
+ pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext;
+ if (!pVosContext)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Vos ctx is null", __func__);
+ return -1;
+ }
switch(sub_cmd)
{
@@ -1907,6 +1931,7 @@ static iw_softap_ap_stats(struct net_device *dev,
int len = wrqu->data.length;
pstatbuf = wrqu->data.pointer;
+ memset(&statBuffer, 0, sizeof(statBuffer));
WLANSAP_GetStatistics((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext,
&statBuffer, (v_BOOL_t)wrqu->data.flags);
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index 7d269b724701..39a11a6d62fa 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -1021,7 +1021,7 @@ VOS_STATUS hdd_softap_tx_complete_cbk( v_VOID_t *vosContext,
//Return the skb to the OS
status = vos_pkt_get_os_packet( pVosPacket, &pOsPkt, VOS_TRUE );
- if(!VOS_IS_STATUS_SUCCESS( status ))
+ if ((!VOS_IS_STATUS_SUCCESS(status)) || (!pOsPkt))
{
//This is bad but still try to free the VOSS resources if we can
VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR,"%s: Failure extracting skb from vos pkt", __func__);