qcacmn: Reject partner link based on security check

For multi link connection there might be the case where
rsnxe of the AP is not present on the link vdev.
This causes the link vdev alone to downgrade to 11ax
mode and assoc vdev is in 11be dot11 mode.
So for vdev with ML peer, the dot11mode is 11ax,
which causes abnormal firmware behavior.

Reject the partner link that doesn’t pass the security
check and validate the next available partner link.
if none of the partner link passes the security check,
proceed connection with single link.

Change-Id: I080557027180c0566a1c284a93fcc4b69c61a9c8
CRs-Fixed: 3581189
这个提交包含在:
Aravind Kishore Sukla
2023-08-10 23:16:13 +05:30
提交者 Rahul Choudhary
父节点 15b56b62e4
当前提交 78d988e666
修改 7 个文件,包含 61 行新增46 行删除

查看文件

@@ -2159,22 +2159,20 @@ uint32_t scm_get_last_scan_time_per_channel(struct wlan_objmgr_vdev *vdev,
return 0;
}
QDF_STATUS
struct scan_cache_entry *
scm_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid,
uint16_t freq,
struct scan_cache_entry
*cache_entry)
uint16_t freq)
{
struct scan_filter *scan_filter;
qdf_list_t *list = NULL;
struct scan_cache_node *first_node = NULL;
qdf_list_node_t *cur_node = NULL;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
struct scan_cache_entry *scan_entry = NULL;
scan_filter = qdf_mem_malloc(sizeof(*scan_filter));
if (!scan_filter)
return QDF_STATUS_E_NOMEM;
return NULL;
scan_filter->num_of_bssid = 1;
scan_filter->chan_freq_list[0] = freq;
scan_filter->num_of_channels = 1;
@@ -2183,7 +2181,9 @@ scm_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
list = scm_get_scan_result(pdev, scan_filter);
qdf_mem_free(scan_filter);
if (!list || (list && !qdf_list_size(list))) {
status = QDF_STATUS_E_INVAL;
scm_debug("Scan entry for bssid:"
QDF_MAC_ADDR_FMT "and freq %d not found",
QDF_MAC_ADDR_REF(bssid->bytes), freq);
goto done;
}
/*
@@ -2198,18 +2198,14 @@ scm_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct scan_cache_node,
node);
if (first_node && first_node->entry) {
qdf_mem_copy(cache_entry,
first_node->entry,
sizeof(struct scan_cache_entry));
status = QDF_STATUS_SUCCESS;
}
if (first_node && first_node->entry)
scan_entry = util_scan_copy_cache_entry(first_node->entry);
done:
if (list)
scm_purge_scan_results(list);
return status;
return scan_entry;
}
QDF_STATUS

查看文件

@@ -321,16 +321,13 @@ uint32_t scm_get_last_scan_time_per_channel(struct wlan_objmgr_vdev *vdev,
* @pdev: pdev info
* @bssid: BSSID of the bcn/probe response to be fetched from scan db
* @freq: freq for scan filter
* @cache_entry: cache entry to be filled from scan info
*
* Return: QDF_STATUS_SUCCESS if scan entry is present in scan db
* Return: scan entry if found, else NULL
*/
QDF_STATUS
struct scan_cache_entry *
scm_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid,
uint16_t freq,
struct scan_cache_entry
*cache_entry);
uint16_t freq);
/**
* scm_scan_get_entry_by_mac_addr() - Get bcn/probe rsp from scan db

查看文件

@@ -47,16 +47,13 @@ void wlan_scan_get_feature_info(struct wlan_objmgr_psoc *psoc,
* @pdev: pointer to pdev object
* @bssid: pointer to mac addr
* @freq: frequency for scan filter
* @cache_entry: pointer to scan cache_entry
*
* Return: success if scan entry is found in scan db
* Return: scan entry if found, else NULL
*/
QDF_STATUS
struct scan_cache_entry *
wlan_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid,
uint16_t freq,
struct scan_cache_entry
*cache_entry);
uint16_t freq);
/**
* wlan_scan_cfg_set_active_2g_dwelltime() - API to set scan active 2g dwelltime

查看文件

@@ -879,13 +879,10 @@ wlan_scan_get_mld_addr_by_link_addr(struct wlan_objmgr_pdev *pdev,
return scm_get_mld_addr_by_link_addr(pdev, link_addr, mld_mac_addr);
}
QDF_STATUS
struct scan_cache_entry *
wlan_scan_get_scan_entry_by_mac_freq(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid,
uint16_t freq,
struct scan_cache_entry
*cache_entry)
uint16_t freq)
{
return scm_scan_get_scan_entry_by_mac_freq(pdev, bssid, freq,
cache_entry);
return scm_scan_get_scan_entry_by_mac_freq(pdev, bssid, freq);
}