diff options
| -rw-r--r-- | core/hdd/inc/wlan_hdd_main.h | 8 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg80211.c | 95 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_hostapd.c | 15 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_lpass.c | 4 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_p2p.c | 23 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_power.c | 21 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_scan.c | 20 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_stats.c | 5 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_tdls.c | 10 |
9 files changed, 197 insertions, 4 deletions
diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index dbab5eba0196..c078f75f18c5 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1962,4 +1962,12 @@ hdd_wlan_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) } #endif +static inline int wlan_hdd_validate_session_id(u8 session_id) +{ + if (session_id != HDD_SESSION_ID_INVALID) + return 0; + + return -EINVAL; +} + #endif /* end #if !defined(WLAN_HDD_MAIN_H) */ diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 7807c42aa327..732351ca7f3e 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -4978,6 +4978,11 @@ __wlan_hdd_cfg80211_monitor_rssi(struct wiphy *wiphy, ENTER_DEV(dev); + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); + return -EINVAL; + } + ret = wlan_hdd_validate_context(hdd_ctx); if (ret) return ret; @@ -9299,6 +9304,11 @@ static int __wlan_hdd_cfg80211_change_bss(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_CHANGE_BSS, pAdapter->sessionId, params->ap_isolate)); @@ -9706,6 +9716,11 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy, TRACE_CODE_HDD_CHANGE_STATION, pAdapter->sessionId, params->listen_interval)); + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); ret = wlan_hdd_validate_context(pHddCtx); if (0 != ret) @@ -9974,6 +9989,11 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_ADD_KEY, pAdapter->sessionId, params->key_len)); @@ -10430,6 +10450,11 @@ static int __wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_SET_DEFAULT_KEY, pAdapter->sessionId, key_index)); @@ -10834,6 +10859,11 @@ int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy, ENTER(); + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_UPDATE_BSS, NO_SESSION, pAdapter->sessionId)); @@ -12417,6 +12447,11 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_CONNECT, pAdapter->sessionId, pAdapter->device_mode)); @@ -12679,6 +12714,11 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_DISCONNECT, pAdapter->sessionId, reason)); @@ -12909,6 +12949,11 @@ static int __wlan_hdd_cfg80211_join_ibss(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_JOIN_IBSS, pAdapter->sessionId, pAdapter->device_mode)); @@ -13111,6 +13156,11 @@ static int __wlan_hdd_cfg80211_leave_ibss(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_LEAVE_IBSS, pAdapter->sessionId, @@ -13429,6 +13479,11 @@ int __wlan_hdd_cfg80211_del_station(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_DEL_STA, pAdapter->sessionId, pAdapter->device_mode)); @@ -13667,6 +13722,11 @@ static int __wlan_hdd_cfg80211_add_station(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_ADD_STA, pAdapter->sessionId, params->listen_interval)); @@ -13746,6 +13806,11 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + if (!pmksa) { hdd_err("pmksa is NULL"); return -EINVAL; @@ -13827,6 +13892,11 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + if (!pmksa) { hdd_err("pmksa is NULL"); return -EINVAL; @@ -13907,6 +13977,11 @@ static int __wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + hdd_warn("Flushing PMKSA"); pHddCtx = WLAN_HDD_GET_CTX(pAdapter); @@ -13978,6 +14053,11 @@ __wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_UPDATE_FT_IES, pAdapter->sessionId, pHddStaCtx->conn_info.connState)); @@ -14109,6 +14189,11 @@ int __wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_SET_REKEY_DATA, pAdapter->sessionId, pAdapter->device_mode)); @@ -14600,6 +14685,11 @@ __wlan_hdd_cfg80211_set_ap_channel_width(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); status = wlan_hdd_validate_context(pHddCtx); if (status) @@ -14707,6 +14797,11 @@ static int __wlan_hdd_cfg80211_channel_switch(struct wiphy *wiphy, hdd_notice("Set Freq %d", csa_params->chandef.chan->center_freq); + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); + return -EINVAL; + } + hdd_ctx = WLAN_HDD_GET_CTX(adapter); ret = wlan_hdd_validate_context(hdd_ctx); diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index e35cea0d183c..5b1c8bb7043e 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7610,6 +7610,11 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_STOP_AP, pAdapter->sessionId, pAdapter->device_mode)); @@ -7835,6 +7840,11 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_START_AP, pAdapter->sessionId, params->beacon_interval)); @@ -8054,6 +8064,11 @@ static int __wlan_hdd_cfg80211_change_beacon(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_CHANGE_BEACON, pAdapter->sessionId, pAdapter->device_mode)); diff --git a/core/hdd/src/wlan_hdd_lpass.c b/core/hdd/src/wlan_hdd_lpass.c index 09cac5689c6f..de80700c7d3e 100644 --- a/core/hdd/src/wlan_hdd_lpass.c +++ b/core/hdd/src/wlan_hdd_lpass.c @@ -77,8 +77,10 @@ static int wlan_hdd_gen_wlan_status_pack(struct wlan_status_data *data, return -EINVAL; } - if (adapter->sessionId == HDD_SESSION_ID_INVALID) + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); return -EINVAL; + } hdd_ctx = WLAN_HDD_GET_CTX(adapter); if (hdd_ctx->lpss_support && hdd_ctx->config->enable_lpass_support) diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 7fe1b20428a4..ed54273ca7d9 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -947,6 +947,11 @@ static int __wlan_hdd_cfg80211_remain_on_channel(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_REMAIN_ON_CHANNEL, pAdapter->sessionId, REMAIN_ON_CHANNEL_REQUEST)); @@ -1091,6 +1096,11 @@ __wlan_hdd_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -1245,6 +1255,11 @@ static int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_ACTION, pAdapter->sessionId, pAdapter->device_mode)); @@ -2038,7 +2053,8 @@ struct wireless_dev *__wlan_hdd_add_virtual_intf(struct wiphy *wiphy, wlan_hdd_tdls_disable_offchan_and_teardown_links(pHddCtx); pAdapter = hdd_get_adapter(pHddCtx, QDF_STA_MODE); - if (pAdapter != NULL) { + if ((pAdapter != NULL) && + !(wlan_hdd_validate_session_id(pAdapter->sessionId))) { scan_info = &pAdapter->scan_info; if (scan_info->mScanPending) { hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId, @@ -2176,6 +2192,11 @@ int __wlan_hdd_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev) return -EINVAL; } + if (wlan_hdd_validate_session_id(pVirtAdapter->sessionId)) { + hdd_err("invalid session id: %d", pVirtAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_DEL_VIRTUAL_INTF, pVirtAdapter->sessionId, pVirtAdapter->device_mode)); diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 4c003fd26030..8da6f6fe5744 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1902,6 +1902,12 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); while (NULL != pAdapterNode && QDF_STATUS_SUCCESS == status) { pAdapter = pAdapterNode->pAdapter; + + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + goto next_adapter; + } + if (QDF_SAP_MODE == pAdapter->device_mode) { if (BSS_START == WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter)->bssState && @@ -1930,6 +1936,7 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, } if (pAdapter->is_roc_inprogress) wlan_hdd_cleanup_remain_on_channel_ctx(pAdapter); +next_adapter: status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext); pAdapterNode = pNext; } @@ -2147,6 +2154,11 @@ static int __wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_SET_POWER_MGMT, pAdapter->sessionId, timeout)); @@ -2332,6 +2344,11 @@ static int __wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); + return -EINVAL; + } + status = wlan_hdd_validate_context(pHddCtx); if (0 != status) { *dbm = 0; @@ -2344,8 +2361,8 @@ static int __wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, } /* Validate adapter sessionId */ - if (adapter->sessionId == HDD_SESSION_ID_INVALID) { - hdd_err("Adapter Session Invalid!"); + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); return -ENOTSUPP; } diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index f74c58fb99b0..0eeea096f8d0 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -1436,6 +1436,11 @@ static int __wlan_hdd_cfg80211_scan(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -2244,6 +2249,11 @@ static int __wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); ret = wlan_hdd_validate_context(pHddCtx); @@ -2526,6 +2536,11 @@ static int __wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); if (NULL == pHddCtx) { @@ -2634,6 +2649,11 @@ static void __wlan_hdd_cfg80211_abort_scan(struct wiphy *wiphy, return; } + if (wlan_hdd_validate_session_id(adapter->sessionId)) { + hdd_err("invalid session id: %d", adapter->sessionId); + return; + } + ret = wlan_hdd_validate_context(hdd_ctx); if (!ret) return; diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index e38f1db5f85a..67f45a364d05 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -1659,6 +1659,11 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || (0 == ssidlen)) { hdd_notice("Not associated or Invalid ssidlen, %d", diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 0227bd10d69e..4674bd137281 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -3932,6 +3932,11 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_TDLS_MGMT, pAdapter->sessionId, action_code)); @@ -4438,6 +4443,11 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, return -EINVAL; } + if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { + hdd_err("invalid session id: %d", pAdapter->sessionId); + return -EINVAL; + } + MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_TDLS_OPER, pAdapter->sessionId, oper)); |
