lkml.org 
[lkml]   [2020]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 07/88] mac80211: consider more elements in parsing CRC
    Date
    From: Johannes Berg <johannes.berg@intel.com>

    [ Upstream commit a04564c99bb4a92f805a58e56b2d22cc4978f152 ]

    We only use the parsing CRC for checking if a beacon changed,
    and elements with an ID > 63 cannot be represented in the
    filter. Thus, like we did before with WMM and Cisco vendor
    elements, just statically add these forgotten items to the
    CRC:
    - WLAN_EID_VHT_OPERATION
    - WLAN_EID_OPMODE_NOTIF

    I guess that in most cases when VHT/HE operation change, the HT
    operation also changed, and so the change was picked up, but we
    did notice that pure operating mode notification changes were
    ignored.

    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/20200131111300.891737-22-luca@coelho.fi
    [restrict to VHT for the mac80211 branch]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/mac80211/util.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    diff --git a/net/mac80211/util.c b/net/mac80211/util.c
    index ca7de02e0a6e9..52f9742c438a4 100644
    --- a/net/mac80211/util.c
    +++ b/net/mac80211/util.c
    @@ -943,16 +943,22 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
    elem_parse_failed = true;
    break;
    case WLAN_EID_VHT_OPERATION:
    - if (elen >= sizeof(struct ieee80211_vht_operation))
    + if (elen >= sizeof(struct ieee80211_vht_operation)) {
    elems->vht_operation = (void *)pos;
    - else
    - elem_parse_failed = true;
    + if (calc_crc)
    + crc = crc32_be(crc, pos - 2, elen + 2);
    + break;
    + }
    + elem_parse_failed = true;
    break;
    case WLAN_EID_OPMODE_NOTIF:
    - if (elen > 0)
    + if (elen > 0) {
    elems->opmode_notif = pos;
    - else
    - elem_parse_failed = true;
    + if (calc_crc)
    + crc = crc32_be(crc, pos - 2, elen + 2);
    + break;
    + }
    + elem_parse_failed = true;
    break;
    case WLAN_EID_MESH_ID:
    elems->mesh_id = pos;
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-03-10 14:35    [W:5.821 / U:0.636 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site