mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
qcacld-3.0: Add NULL Check in iwpriv ioctl iw_setint_getnone
qcacld-2.0 to qcacld-3.0 propagation iw_setint_getnone can cause crash in monitor mode as hal context is not initialized. Modify the code to handle dereferencing hHal in Driver Monitor mode. CRs-Fixed: 1040579 Change-Id: If26cfab5374ac34c55e03b887c320c0736a9df23
This commit is contained in:
parent
3a339aed2e
commit
8cbd921ba2
1 changed files with 61 additions and 12 deletions
|
|
@ -7949,8 +7949,8 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
switch (sub_cmd) {
|
||||
case WE_SET_11D_STATE:
|
||||
{
|
||||
if ((ENABLE_11D == set_value)
|
||||
|| (DISABLE_11D == set_value)) {
|
||||
if (((ENABLE_11D == set_value)
|
||||
|| (DISABLE_11D == set_value)) && hHal) {
|
||||
|
||||
sme_get_config_param(hHal, sme_config);
|
||||
sme_config->csrConfig.Is11dSupportEnabled =
|
||||
|
|
@ -7970,6 +7970,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
|
||||
case WE_WOWL:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
switch (set_value) {
|
||||
case 0x00:
|
||||
hdd_exit_wowl(pAdapter);
|
||||
|
|
@ -7995,6 +7998,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
}
|
||||
case WE_SET_POWER:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
switch (set_value) {
|
||||
case 1:
|
||||
/* Enable PowerSave */
|
||||
|
|
@ -8023,6 +8029,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
|
||||
case WE_SET_MAX_ASSOC:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
if ((WNI_CFG_ASSOC_STA_LIMIT_STAMIN > set_value) ||
|
||||
(WNI_CFG_ASSOC_STA_LIMIT_STAMAX < set_value)) {
|
||||
ret = -EINVAL;
|
||||
|
|
@ -8044,6 +8053,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
break;
|
||||
|
||||
case WE_SET_DATA_INACTIVITY_TO:
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
if ((set_value < CFG_DATA_INACTIVITY_TIMEOUT_MIN) ||
|
||||
(set_value > CFG_DATA_INACTIVITY_TIMEOUT_MAX) ||
|
||||
(sme_cfg_set_int((WLAN_HDD_GET_CTX(pAdapter))->hHal,
|
||||
|
|
@ -8070,6 +8082,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
break;
|
||||
case WE_SET_MC_RATE:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
ret = wlan_hdd_set_mc_rate(pAdapter, set_value);
|
||||
break;
|
||||
}
|
||||
|
|
@ -8077,6 +8092,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
{
|
||||
struct qdf_mac_addr bssid;
|
||||
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
qdf_copy_macaddr(&bssid, &pHddStaCtx->conn_info.bssId);
|
||||
if (sme_set_tx_power
|
||||
(hHal, pAdapter->sessionId, bssid,
|
||||
|
|
@ -8093,6 +8111,8 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
struct qdf_mac_addr bssid;
|
||||
struct qdf_mac_addr selfMac;
|
||||
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_debug("Setting maximum tx power %d dBm",
|
||||
set_value);
|
||||
|
|
@ -8154,7 +8174,10 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
|
||||
case WE_SET_TM_LEVEL:
|
||||
{
|
||||
hdd_debug("Set Thermal Mitigation Level %d", set_value);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_notice("Set Thermal Mitigation Level %d", set_value);
|
||||
(void)sme_set_thermal_level(hHal, set_value);
|
||||
break;
|
||||
}
|
||||
|
|
@ -8162,6 +8185,8 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
case WE_SET_PHYMODE:
|
||||
{
|
||||
struct hdd_context *phddctx = WLAN_HDD_GET_CTX(pAdapter);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
ret =
|
||||
wlan_hdd_update_phymode(dev, hHal, set_value,
|
||||
|
|
@ -8171,7 +8196,10 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
|
||||
case WE_SET_NSS:
|
||||
{
|
||||
hdd_debug("Set NSS = %d", set_value);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_notice("Set NSS = %d", set_value);
|
||||
if ((set_value > 2) || (set_value <= 0)) {
|
||||
hdd_err("NSS greater than 2 not supported");
|
||||
ret = -EINVAL;
|
||||
|
|
@ -8260,30 +8288,37 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
|
||||
case WE_SET_LDPC:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
ret = hdd_set_ldpc(pAdapter, set_value);
|
||||
break;
|
||||
}
|
||||
|
||||
case WE_SET_TX_STBC:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
ret = hdd_set_tx_stbc(pAdapter, set_value);
|
||||
break;
|
||||
}
|
||||
|
||||
case WE_SET_RX_STBC:
|
||||
{
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
ret = hdd_set_rx_stbc(pAdapter, set_value);
|
||||
break;
|
||||
}
|
||||
|
||||
case WE_SET_SHORT_GI:
|
||||
{
|
||||
hdd_debug("WMI_VDEV_PARAM_SGI val %d", set_value);
|
||||
/*
|
||||
* wma_cli_set_command should be called instead of
|
||||
* sme_update_ht_config since SGI is used for HT/HE.
|
||||
* This should be refactored.
|
||||
*/
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_notice("WMI_VDEV_PARAM_SGI val %d", set_value);
|
||||
ret = sme_update_ht_config(hHal, pAdapter->sessionId,
|
||||
WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ,
|
||||
set_value);
|
||||
|
|
@ -8296,7 +8331,10 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
{
|
||||
uint32_t value;
|
||||
|
||||
hdd_debug("WMI_VDEV_PARAM_ENABLE_RTSCTS val 0x%x",
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_notice("WMI_VDEV_PARAM_ENABLE_RTSCTS val 0x%x",
|
||||
set_value);
|
||||
|
||||
if ((set_value & HDD_RTSCTS_EN_MASK) ==
|
||||
|
|
@ -8333,6 +8371,8 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
{
|
||||
bool chwidth = false;
|
||||
struct hdd_context *phddctx = WLAN_HDD_GET_CTX(pAdapter);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
/*updating channel bonding only on 5Ghz */
|
||||
hdd_debug("WMI_VDEV_PARAM_CHWIDTH val %d",
|
||||
|
|
@ -8969,6 +9009,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
case WE_SET_DEBUG_LOG:
|
||||
{
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
hdd_ctx->config->gEnableDebugLog = set_value;
|
||||
sme_update_connect_debug(hdd_ctx->hHal, set_value);
|
||||
|
|
@ -9044,7 +9087,10 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
}
|
||||
case WE_SET_SCAN_DISABLE:
|
||||
{
|
||||
hdd_debug("SET SCAN DISABLE %d", set_value);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_notice("SET SCAN DISABLE %d", set_value);
|
||||
sme_set_scan_disable(WLAN_HDD_GET_HAL_CTX(pAdapter), set_value);
|
||||
break;
|
||||
}
|
||||
|
|
@ -9060,6 +9106,9 @@ static int __iw_setint_getnone(struct net_device *dev,
|
|||
{
|
||||
hdd_debug("Set Channel %d Session ID %d mode %d", set_value,
|
||||
pAdapter->sessionId, pAdapter->device_mode);
|
||||
if (!hHal)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
if ((QDF_STA_MODE == pAdapter->device_mode) ||
|
||||
(QDF_P2P_CLIENT_MODE == pAdapter->device_mode)) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue