Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cfg80211: More error messages for key addition failures

These were helpful while working with extensions to NL80211_CMD_NEW_KEY,
so add more explicit error reporting for additional cases that can fail
while that command is being processed.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Link: https://lore.kernel.org/r/20200222132548.20835-1-jouni@codeaurora.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>

authored by

Jouni Malinen and committed by
Johannes Berg
f8af764b cd9b52bf

+15 -4
+15 -4
net/wireless/nl80211.c
··· 3978 3978 if (err) 3979 3979 return err; 3980 3980 3981 - if (!key.p.key) 3981 + if (!key.p.key) { 3982 + GENL_SET_ERR_MSG(info, "no key"); 3982 3983 return -EINVAL; 3984 + } 3983 3985 3984 3986 if (info->attrs[NL80211_ATTR_MAC]) 3985 3987 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); ··· 3995 3993 3996 3994 /* for now */ 3997 3995 if (key.type != NL80211_KEYTYPE_PAIRWISE && 3998 - key.type != NL80211_KEYTYPE_GROUP) 3996 + key.type != NL80211_KEYTYPE_GROUP) { 3997 + GENL_SET_ERR_MSG(info, "key type not pairwise or group"); 3999 3998 return -EINVAL; 3999 + } 4000 4000 4001 4001 if (key.type == NL80211_KEYTYPE_GROUP && 4002 4002 info->attrs[NL80211_ATTR_VLAN_ID]) ··· 4009 4005 4010 4006 if (cfg80211_validate_key_settings(rdev, &key.p, key.idx, 4011 4007 key.type == NL80211_KEYTYPE_PAIRWISE, 4012 - mac_addr)) 4008 + mac_addr)) { 4009 + GENL_SET_ERR_MSG(info, "key setting validation failed"); 4013 4010 return -EINVAL; 4011 + } 4014 4012 4015 4013 wdev_lock(dev->ieee80211_ptr); 4016 4014 err = nl80211_key_allowed(dev->ieee80211_ptr); 4017 - if (!err) 4015 + if (err) 4016 + GENL_SET_ERR_MSG(info, "key not allowed"); 4017 + if (!err) { 4018 4018 err = rdev_add_key(rdev, dev, key.idx, 4019 4019 key.type == NL80211_KEYTYPE_PAIRWISE, 4020 4020 mac_addr, &key.p); 4021 + if (err) 4022 + GENL_SET_ERR_MSG(info, "key addition failed"); 4023 + } 4021 4024 wdev_unlock(dev->ieee80211_ptr); 4022 4025 4023 4026 return err;