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