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
这个提交包含在:
@@ -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);
|
||||
}
|
||||
|
在新工单中引用
屏蔽一个用户