qcacmn: Use the correct offset to fetch STA profile subelement
STA info length subfield of STA info field indicates the number of octets in the STA Info field, including one octet for the STA Info Length subfield. In the current implementation, one extra byte is added to STA info length subfield to access STA profile subfield. Due to this, unable to extract CSA, ECSA and MCST IEs from the STA profile. To fix this, don't add WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE to offset field to access the STA profile subelement. Change-Id: I99fb3c5d1bfb9b3bf414fc0b778d724e98a3c7ae CRs-Fixed: 3640538
This commit is contained in:

committato da
Ravindra Konda

parent
6f36269b7a
commit
608e4120f0
@@ -2232,6 +2232,15 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
||||
|
||||
/* TODO: loop through all the STA info fields */
|
||||
|
||||
/*
|
||||
* Per-STA Profile subelement format of the Basic Multi-Link element
|
||||
*
|
||||
* |---------------|--------|-------------|----------|-------------|
|
||||
* | Subelement ID | Length | STA control | STA info | STA profile |
|
||||
* |---------------|--------|-------------|----------|-------------|
|
||||
* Octets: 1 1 2 variable variable
|
||||
*/
|
||||
|
||||
/* Sub element ID 0 represents Per-STA Profile */
|
||||
if (ml_ie[offset] == 0) {
|
||||
perstaprof_len = ml_ie[offset + 1];
|
||||
@@ -2256,18 +2265,19 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
||||
|
||||
/*
|
||||
* offset points to the beginning of the STA Info field which
|
||||
* holds the length of the variable field.
|
||||
* indicates the number of octets in the STA Info field,
|
||||
* including one octet for the STA Info Length subfield.
|
||||
*/
|
||||
perstaprof_stainfo_len = ml_ie[offset];
|
||||
|
||||
/* Skip STA Info Length field */
|
||||
offset += WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE;
|
||||
offset += perstaprof_stainfo_len;
|
||||
|
||||
/*
|
||||
* To point to the ie_list offset move past the STA Info
|
||||
* field.
|
||||
*/
|
||||
ielist_offset = &ml_ie[offset + perstaprof_stainfo_len];
|
||||
ielist_offset = &ml_ie[offset];
|
||||
|
||||
/*
|
||||
* Ensure that the STA Control Field + STA Info Field
|
||||
@@ -2275,7 +2285,6 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
||||
* the pointer to avoid underflow during subtraction.
|
||||
*/
|
||||
if ((perstaprof_stainfo_len +
|
||||
WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE +
|
||||
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE) <
|
||||
perstaprof_len) {
|
||||
if (!(ielist_offset <= end_ptr))
|
||||
@@ -2283,7 +2292,6 @@ util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
||||
else
|
||||
ielist_len = perstaprof_len -
|
||||
(WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE +
|
||||
WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE +
|
||||
perstaprof_stainfo_len);
|
||||
} else {
|
||||
scm_debug("No STA profile IE list found");
|
||||
|
Fai riferimento in un nuovo problema
Block a user