Merge tag 'LA.UM.9.14.r1-25800-LAHAINA.QSSI15.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0 into android13-5.4-lahaina

"LA.UM.9.14.r1-25800-LAHAINA.QSSI15.0"

* tag 'LA.UM.9.14.r1-25800-LAHAINA.QSSI15.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0:
  qcacld-3.0: Fix the possible OOB write in country IE unpack
  qcacld-3.0: Correcting the TSInfo structure size according to the Spec
  Release 2.0.8.34Y
  qcacld-3.0: Correcting the TSInfo structure size according to the Spec
  Release 2.0.8.34X
  qcacld-3.0: Remove use-after-free of frame in tx mgmt send
  Release 2.0.8.34W
  qcacld-3.0: Fix the possible OOB write in country IE unpack
  Release 2.0.8.34V
  qcacld-3.0: Enhance the RSNXE inter-op logic
  Release 2.0.8.34U
  qcacld-3.0: Set sar safety req resp event before unsolited work stop
  Release 2.0.8.34T
  qcacld-3.0: Update connect request crypto parameters
  qcacld-3.0: Enable CFG80211_MULTI_AKM_CONNECT_SUPPORT from kernelv6.0
  qcacld-3.0: Update wiphy max_num_akms_connect variable

Change-Id: I79d549c4c8c2f38dc18509f91f12befc15bb19c6
This commit is contained in:
Michael Bestas 2025-02-14 03:26:23 +02:00
commit 48d717fa96
No known key found for this signature in database
GPG key ID: CC95044519BE6669
8 changed files with 45 additions and 82 deletions

View file

@ -17364,7 +17364,7 @@ wlan_hdd_update_akm_suit_info(struct wiphy *wiphy)
static void
wlan_hdd_update_max_connect_akm(struct wiphy *wiphy)
{
wiphy->max_num_akms_connect = WLAN_CM_MAX_CONNECT_AKMS;
wiphy->max_num_akm_suites = WLAN_CM_MAX_CONNECT_AKMS;
}
#else
static void
@ -20518,7 +20518,23 @@ static bool wlan_hdd_is_akm_suite_fils(uint32_t key_mgmt)
}
}
static int
hdd_get_num_akm_suites(const struct cfg80211_connect_params *req)
{
return req->crypto.n_akm_suites;
}
static uint32_t*
hdd_get_akm_suites(const struct cfg80211_connect_params *req)
{
return (uint32_t *)req->crypto.akm_suites;
}
#ifdef CFG80211_MULTI_AKM_CONNECT_SUPPORT
#define MAX_AKM_SUITES WLAN_CM_MAX_CONNECT_AKMS
#else
#define MAX_AKM_SUITES NL80211_MAX_NR_AKM_SUITES
#endif
/**
* hdd_populate_crypto_akm_type() - populate akm type for crypto
* @vdev: pointed to vdev obmgr
@ -20538,64 +20554,9 @@ hdd_populate_crypto_akm_type(struct wlan_objmgr_vdev *vdev,
uint32_t set_val = 0;
wlan_crypto_key_mgmt akm;
if (req->crypto.n_connect_akm_suites) {
for (i = 0; i < req->crypto.n_connect_akm_suites &&
i < WLAN_CM_MAX_CONNECT_AKMS; i++) {
akm = osif_nl_to_crypto_akm_type(
req->crypto.connect_akm_suites[i]);
HDD_SET_BIT(set_val, akm);
}
status = wlan_crypto_set_vdev_param(vdev,
WLAN_CRYPTO_PARAM_KEY_MGMT,
set_val);
if (QDF_IS_STATUS_ERROR(status))
hdd_err("Failed to set akm type %0x to crypto",
set_val);
status = wlan_crypto_set_vdev_param(
vdev, WLAN_CRYPTO_PARAM_ORIG_KEY_MGMT, set_val);
if (QDF_IS_STATUS_ERROR(status))
hdd_err("Failed to set original akm type %0x to crypto",
set_val);
} else {
set_val = 0;
/* Reset to none */
HDD_SET_BIT(set_val, WLAN_CRYPTO_KEY_MGMT_NONE);
wlan_crypto_set_vdev_param(vdev,
WLAN_CRYPTO_PARAM_KEY_MGMT,
set_val);
wlan_crypto_set_vdev_param(vdev,
WLAN_CRYPTO_PARAM_ORIG_KEY_MGMT,
set_val);
}
}
static int
hdd_get_num_akm_suites(const struct cfg80211_connect_params *req)
{
return req->crypto.n_connect_akm_suites;
}
static uint32_t*
hdd_get_akm_suites(const struct cfg80211_connect_params *req)
{
return (uint32_t *)req->crypto.connect_akm_suites;
}
#else
static void
hdd_populate_crypto_akm_type(struct wlan_objmgr_vdev *vdev,
const struct cfg80211_connect_params *req)
{
QDF_STATUS status;
uint32_t i = 0;
uint32_t set_val = 0;
wlan_crypto_key_mgmt akm;
if (req->crypto.n_akm_suites) {
for (i = 0; i < req->crypto.n_akm_suites &&
i < NL80211_MAX_NR_AKM_SUITES; i++) {
i < MAX_AKM_SUITES; i++) {
akm = osif_nl_to_crypto_akm_type(
req->crypto.akm_suites[i]);
@ -20628,19 +20589,6 @@ hdd_populate_crypto_akm_type(struct wlan_objmgr_vdev *vdev,
}
}
static int
hdd_get_num_akm_suites(const struct cfg80211_connect_params *req)
{
return req->crypto.n_akm_suites;
}
static uint32_t*
hdd_get_akm_suites(const struct cfg80211_connect_params *req)
{
return (uint32_t *)req->crypto.akm_suites;
}
#endif
static bool wlan_hdd_is_conn_type_fils(struct cfg80211_connect_params *req)
{
enum nl80211_auth_type auth_type = req->auth_type;

View file

@ -208,6 +208,20 @@ extern const struct nla_policy wlan_hdd_wisa_cmd_policy[
#define USE_CFG80211_DEL_STA_V2
#endif
/*
* CFG80211_MULTI_AKM_CONNECT_SUPPORT
* used to indicate the Linux kernel contains support for multi AKM connect
* support
*
* This feature was introduced in Linux Kernel 6.0 via:
* ecad3b0b99bf wifi: cfg80211: Increase akm_suites array size in
* cfg80211_crypto_settings.
*/
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) || \
(defined CFG80211_MAX_NUM_AKM_SUITES))
#define CFG80211_MULTI_AKM_CONNECT_SUPPORT 1
#endif
#ifdef CFG80211_MULTI_AKM_CONNECT_SUPPORT
#define WLAN_CM_MAX_CONNECT_AKMS 5
#endif

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -1082,10 +1082,11 @@ void wlan_hdd_sar_timers_reset(struct hdd_context *hdd_ctx)
if (QDF_IS_STATUS_SUCCESS(status))
hdd_nofl_debug("sar safety timer started");
qdf_event_set(&hdd_ctx->sar_safety_req_resp_event);
qdf_delayed_work_stop_sync(&hdd_ctx->sar_safety_unsolicited_work);
hdd_nofl_debug("sar safety unsolicited work stopped");
qdf_event_set(&hdd_ctx->sar_safety_req_resp_event);
}
void wlan_hdd_sar_timers_init(struct hdd_context *hdd_ctx)

View file

@ -32,9 +32,9 @@
#define QWLAN_VERSION_MAJOR 2
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 8
#define QWLAN_VERSION_EXTRA "S"
#define QWLAN_VERSION_EXTRA "Y"
#define QWLAN_VERSION_BUILD 34
#define QWLAN_VERSIONSTR "2.0.8.34S"
#define QWLAN_VERSIONSTR "2.0.8.34Y"
#endif /* QWLAN_VERSION_H */

View file

@ -370,7 +370,7 @@ FF SMPowerModeSet (1) //7.3.1.25
}
}
FF TSInfo (3) // 7.3.2.30
FF TSInfo (4) // 7.3.2.30
{
{
traffic_type: 1;

View file

@ -27,7 +27,7 @@
*
*
* This file was automatically generated by 'framesc'
* Mon May 30 20:50:39 2022 from the following file(s):
* Wed Sep 11 12:49:28 2024 from the following file(s):
*
* dot11f.frms
*
@ -442,7 +442,7 @@ typedef struct sDot11fFfTSInfo {
uint32_t unused:15;
} tDot11fFfTSInfo;
#define DOT11F_FF_TSINFO_LEN (3)
#define DOT11F_FF_TSINFO_LEN (4)
void dot11f_unpack_ff_ts_info(tpAniSirGlobal, uint8_t *, tDot11fFfTSInfo *);

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the

View file

@ -25,7 +25,7 @@
*
*
* This file was automatically generated by 'framesc'
* Mon May 30 20:50:39 2022 from the following file(s):
* Wed Sep 11 12:49:28 2024 from the following file(s):
*
* dot11f.frms
*
@ -134,7 +134,7 @@ typedef struct sIEDefn {
#define DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
do { \
if (!pSrc || IsBadReadPtr(pSrc, 4))\
eturn DOT11F_BAD_INPUT_BUFFER; \
return DOT11F_BAD_INPUT_BUFFER; \
if (!pBuf || IsBadWritePtr(pBuf, nBuf))\
return DOT11F_BAD_OUTPUT_BUFFER; \
if (!nBuf)\
@ -4131,7 +4131,7 @@ uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx,
return 0U;
} else {
pDst->num_more_triplets = (uint8_t)(ielen / 3);
if (ielen / 3 > 80) {
if (ielen > 80 * 3) {
pDst->present = 0;
return DOT11F_SKIPPED_BAD_IE;
}
@ -16710,7 +16710,7 @@ uint32_t dot11f_get_packed_del_ts_size(tpAniSirGlobal pCtx,
tDot11fDelTS *pFrm, uint32_t *pnNeeded)
{
uint32_t status = 0;
*pnNeeded = 7;
*pnNeeded = 8;
status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
IES_DelTS);
return status;