wifi: mac80211: clear all bits that relate rtap fields on skb
Since we remove radiotap from skb data, clear all RX_FLAG_X related info that indicate info on the skb data. Also we need to do it only once so remove the clear from cooked_monitor. Signed-off-by: Mordechay Goodstein <mordechay.goodstein@intel.com> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20230301115906.74d3efe19eae.Ie17a35864d2e120f9858516a2e3d3047d83cf805@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
0fd3af6173
commit
3a867c7eef
|
@ -43,6 +43,7 @@ static struct sk_buff *ieee80211_clean_skb(struct sk_buff *skb,
|
|||
unsigned int present_fcs_len,
|
||||
unsigned int rtap_space)
|
||||
{
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
struct ieee80211_hdr *hdr;
|
||||
unsigned int hdrlen;
|
||||
__le16 fc;
|
||||
|
@ -51,6 +52,14 @@ static struct sk_buff *ieee80211_clean_skb(struct sk_buff *skb,
|
|||
__pskb_trim(skb, skb->len - present_fcs_len);
|
||||
pskb_pull(skb, rtap_space);
|
||||
|
||||
/* After pulling radiotap header, clear all flags that indicate
|
||||
* info in skb->data.
|
||||
*/
|
||||
status->flag &= ~(RX_FLAG_RADIOTAP_VENDOR_DATA |
|
||||
RX_FLAG_RADIOTAP_LSIG |
|
||||
RX_FLAG_RADIOTAP_HE_MU |
|
||||
RX_FLAG_RADIOTAP_HE);
|
||||
|
||||
hdr = (void *)skb->data;
|
||||
fc = hdr->frame_control;
|
||||
|
||||
|
@ -3916,8 +3925,6 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
|
|||
if (!local->cooked_mntrs)
|
||||
goto out_free_skb;
|
||||
|
||||
/* vendor data is long removed here */
|
||||
status->flag &= ~RX_FLAG_RADIOTAP_VENDOR_DATA;
|
||||
/* room for the radiotap header based on driver features */
|
||||
needed_headroom = ieee80211_rx_radiotap_hdrlen(local, status, skb);
|
||||
|
||||
|
|
Loading…
Reference in New Issue