nl80211: validate key indexes for cfg80211_registered_device
authorAnant Thazhemadam <anant.thazhemadam@gmail.com>
Fri, 4 Dec 2020 21:58:25 +0000 (03:28 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 11 Dec 2020 12:20:04 +0000 (13:20 +0100)
commit2d9463083ce92636a1bdd3e30d1236e3e95d859e
tree71b70c29817336309d1dacd916265201ba5acf92
parent669b84134a2be14d333d4f82b65943d467404f87
nl80211: validate key indexes for cfg80211_registered_device

syzbot discovered a bug in which an OOB access was being made because
an unsuitable key_idx value was wrongly considered to be acceptable
while deleting a key in nl80211_del_key().

Since we don't know the cipher at the time of deletion, if
cfg80211_validate_key_settings() were to be called directly in
nl80211_del_key(), even valid keys would be wrongly determined invalid,
and deletion wouldn't occur correctly.
For this reason, a new function - cfg80211_valid_key_idx(), has been
created, to determine if the key_idx value provided is valid or not.
cfg80211_valid_key_idx() is directly called in 2 places -
nl80211_del_key(), and cfg80211_validate_key_settings().

Reported-by: syzbot+49d4cab497c2142ee170@syzkaller.appspotmail.com
Tested-by: syzbot+49d4cab497c2142ee170@syzkaller.appspotmail.com
Suggested-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Anant Thazhemadam <anant.thazhemadam@gmail.com>
Link: https://lore.kernel.org/r/20201204215825.129879-1-anant.thazhemadam@gmail.com
Cc: stable@vger.kernel.org
[also disallow IGTK key IDs if no IGTK cipher is supported]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/core.h
net/wireless/nl80211.c
net/wireless/util.c