• Felix Fietkau's avatar
    mac80211: fix rx data handling for non-data frames on multiple vifs · 4bb29f8c
    Felix Fietkau authored
    The loop that passes non-data frames to all relevant vifs inside the
    __ieee80211_rx_handle_packet keeps a pointer to the previous sdata to
    avoid having to make unnecessary copies of the frame it's handling.
    This led to a bug that caused it to apply the ieee80211_rx_data state
    to the wrong interface, thereby either missing the rx.sta pointer or
    having it assigned where it shouldn't be.
    This breaks (among other things) aggregation on some vifs, as action
    frame exchages are dropped to the cooked monitor interface due to
    rx->sta being NULL.
    Fix this by restructuring the loop so that it prepares the rx data just
    before making the skb copy and calling the rx handlers.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    4bb29f8c
rx.c 69.4 KB