lkml.org 
[lkml]   [2018]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 02/96] mac80211: Add RX flag to indicate ICV stripped
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: David Spinadel <david.spinadel@intel.com>

    commit cef0acd4d7d4811d2d19cd0195031bf0dfe41249 upstream.

    Add a flag that indicates that the WEP ICV was stripped from an
    RX packet, allowing the device to not transfer that if it's
    already checked.

    Signed-off-by: David Spinadel <david.spinadel@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Cc: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    include/net/mac80211.h | 5 ++++-
    net/mac80211/wep.c | 3 ++-
    net/mac80211/wpa.c | 3 ++-
    3 files changed, 8 insertions(+), 3 deletions(-)

    --- a/include/net/mac80211.h
    +++ b/include/net/mac80211.h
    @@ -1007,7 +1007,7 @@ ieee80211_tx_info_clear_status(struct ie
    * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
    * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
    * verification has been done by the hardware.
    - * @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame.
    + * @RX_FLAG_IV_STRIPPED: The IV and ICV are stripped from this frame.
    * If this flag is set, the stack cannot do any replay detection
    * hence the driver or hardware will have to do that.
    * @RX_FLAG_PN_VALIDATED: Currently only valid for CCMP/GCMP frames, this
    @@ -1078,6 +1078,8 @@ ieee80211_tx_info_clear_status(struct ie
    * @RX_FLAG_ALLOW_SAME_PN: Allow the same PN as same packet before.
    * This is used for AMSDU subframes which can have the same PN as
    * the first subframe.
    + * @RX_FLAG_ICV_STRIPPED: The ICV is stripped from this frame. CRC checking must
    + * be done in the hardware.
    */
    enum mac80211_rx_flags {
    RX_FLAG_MMIC_ERROR = BIT(0),
    @@ -1113,6 +1115,7 @@ enum mac80211_rx_flags {
    RX_FLAG_RADIOTAP_VENDOR_DATA = BIT(31),
    RX_FLAG_MIC_STRIPPED = BIT_ULL(32),
    RX_FLAG_ALLOW_SAME_PN = BIT_ULL(33),
    + RX_FLAG_ICV_STRIPPED = BIT_ULL(34),
    };

    #define RX_FLAG_STBC_SHIFT 26
    --- a/net/mac80211/wep.c
    +++ b/net/mac80211/wep.c
    @@ -293,7 +293,8 @@ ieee80211_crypto_wep_decrypt(struct ieee
    return RX_DROP_UNUSABLE;
    ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
    /* remove ICV */
    - if (pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN))
    + if (!(status->flag & RX_FLAG_ICV_STRIPPED) &&
    + pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN))
    return RX_DROP_UNUSABLE;
    }

    --- a/net/mac80211/wpa.c
    +++ b/net/mac80211/wpa.c
    @@ -295,7 +295,8 @@ ieee80211_crypto_tkip_decrypt(struct iee
    return RX_DROP_UNUSABLE;

    /* Trim ICV */
    - skb_trim(skb, skb->len - IEEE80211_TKIP_ICV_LEN);
    + if (!(status->flag & RX_FLAG_ICV_STRIPPED))
    + skb_trim(skb, skb->len - IEEE80211_TKIP_ICV_LEN);

    /* Remove IV */
    memmove(skb->data + IEEE80211_TKIP_IV_LEN, skb->data, hdrlen);

    \
     
     \ /
      Last update: 2018-01-15 14:55    [W:4.102 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site