On Tue, 2018-02-27 at 08:52 +0100, Felix Fietkau wrote:
> 
>       if (fast_rx->key && !(status->flag & RX_FLAG_IV_STRIPPED)) {
> +             if (status->rx_flags & IEEE80211_RX_AMSDU)
> +                     return false;

This seemed really odd to me.

>               /* GCMP header length is the same */
>               snap_offs += IEEE80211_CCMP_HDR_LEN;

I understand now though - the problem is that snap_offs isn't used in
__ieee80211_rx_h_amsdu(), and thus we can't do the necessary
adjustments.

I think though that perhaps it'd be better to teach
__ieee80211_rx_h_amsdu() about snap_offs, because assuming in the AMSDU
decap code that snap_offs is more-or-less constant will just make the
dependencies much harder to understand.

Better teach __ieee80211_rx_h_amsdu() about snap_offs, and make the
assumption on the constant in ieee80211_rx_h_amsdu()?


> +     if (status->rx_flags & IEEE80211_RX_AMSDU) {
> +             res = __ieee80211_rx_h_amsdu(rx);
> +             if (res != RX_QUEUED)
> +                     goto drop;
> +
> +             return true;
> +     }

Btw, you also don't need the "res" variable, much less at function
scope; this block would do if at all, but also it should probably use
the right enum type or just be removed.

johannes

Reply via email to