mac80211: fix radiotap vendor presence bitmap handling
Due to the alignment handling, it actually matters where in the code we add the 4 bytes for the presence bitmap to the length; the first field is the timestamp with 8 byte alignment so we need to add the space for the extra vendor namespace presence bitmap *before* we do any alignment for the fields. Move the presence bitmap length accounting to the right place to fix the alignment for the data properly. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
dc7eb0f2c2
commit
efc38dd7d5
|
@ -143,6 +143,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
|
|||
/* allocate extra bitmaps */
|
||||
if (status->chains)
|
||||
len += 4 * hweight8(status->chains);
|
||||
/* vendor presence bitmap */
|
||||
if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)
|
||||
len += 4;
|
||||
|
||||
if (ieee80211_have_rx_timestamp(status)) {
|
||||
len = ALIGN(len, 8);
|
||||
|
@ -207,8 +210,6 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
|
|||
if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
|
||||
struct ieee80211_vendor_radiotap *rtap = (void *)skb->data;
|
||||
|
||||
/* vendor presence bitmap */
|
||||
len += 4;
|
||||
/* alignment for fixed 6-byte vendor data header */
|
||||
len = ALIGN(len, 2);
|
||||
/* vendor data header */
|
||||
|
|
Loading…
Reference in New Issue