lkml.org 
[lkml]   [2020]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 075/117] staging: vt6656: Fix pairwise key entry save.
    Date
    From: Malcolm Priestley <tvboxspy@gmail.com>

    commit 0b59f10b1d8fe8d50944f21f5d403df9303095a8 upstream.

    The problem is that the group key was saved as VNT_KEY_DEFAULTKEY
    was over written by the VNT_KEY_GROUP_ADDRESS index.

    mac80211 could not clear the mac_addr in the default key.

    The VNT_KEY_DEFAULTKEY is not necesscary so remove it and set as
    VNT_KEY_GROUP_ADDRESS.

    mac80211 can clear any key using vnt_mac_disable_keyentry.

    Fixes: f9ef05ce13e4 ("staging: vt6656: Fix pairwise key for non station modes")
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
    Link: https://lore.kernel.org/r/da2f7e7f-1658-1320-6eee-0f55770ca391@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/staging/vt6656/key.c | 14 +++-----------
    drivers/staging/vt6656/main_usb.c | 6 +++++-
    2 files changed, 8 insertions(+), 12 deletions(-)

    --- a/drivers/staging/vt6656/key.c
    +++ b/drivers/staging/vt6656/key.c
    @@ -91,9 +91,6 @@ static int vnt_set_keymode(struct ieee80
    case VNT_KEY_PAIRWISE:
    key_mode |= mode;
    key_inx = 4;
    - /* Don't save entry for pairwise key for station mode */
    - if (priv->op_mode == NL80211_IFTYPE_STATION)
    - clear_bit(entry, &priv->key_entry_inuse);
    break;
    default:
    return -EINVAL;
    @@ -117,7 +114,6 @@ static int vnt_set_keymode(struct ieee80
    int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
    struct ieee80211_vif *vif, struct ieee80211_key_conf *key)
    {
    - struct ieee80211_bss_conf *conf = &vif->bss_conf;
    struct vnt_private *priv = hw->priv;
    u8 *mac_addr = NULL;
    u8 key_dec_mode = 0;
    @@ -159,16 +155,12 @@ int vnt_set_keys(struct ieee80211_hw *hw
    key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
    }

    - if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) {
    + if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
    vnt_set_keymode(hw, mac_addr, key, VNT_KEY_PAIRWISE,
    key_dec_mode, true);
    - } else {
    - vnt_set_keymode(hw, mac_addr, key, VNT_KEY_DEFAULTKEY,
    + else
    + vnt_set_keymode(hw, mac_addr, key, VNT_KEY_GROUP_ADDRESS,
    key_dec_mode, true);

    - vnt_set_keymode(hw, (u8 *)conf->bssid, key,
    - VNT_KEY_GROUP_ADDRESS, key_dec_mode, true);
    - }
    -
    return 0;
    }
    --- a/drivers/staging/vt6656/main_usb.c
    +++ b/drivers/staging/vt6656/main_usb.c
    @@ -827,8 +827,12 @@ static int vnt_set_key(struct ieee80211_
    return -EOPNOTSUPP;
    break;
    case DISABLE_KEY:
    - if (test_bit(key->hw_key_idx, &priv->key_entry_inuse))
    + if (test_bit(key->hw_key_idx, &priv->key_entry_inuse)) {
    clear_bit(key->hw_key_idx, &priv->key_entry_inuse);
    +
    + vnt_mac_disable_keyentry(priv, key->hw_key_idx);
    + }
    +
    default:
    break;
    }

    \
     
     \ /
      Last update: 2020-05-01 15:34    [W:9.400 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site