diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-11-14 12:43:28 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-11-19 12:50:34 -0500 |
commit | d687cbb703f50980e155c5642cf229ec2bb45e3e (patch) | |
tree | 6d4d167a3b672ad05a814d899bbbde8a89240e94 /net/wireless | |
parent | c7ab508190aee6b4a62cfab7ee08457602468672 (diff) |
cfg80211: protect fools returning NULL in add_virtual_intf
Callback add_virtual_intf is supposed to return ERR_PTR and trying to
return NULL results in some "Unable to handle kernel paging request",
etc. As it may be complicated to debug & trace, let's catch it (WARN).
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index dd5a827f9cb0..5cfd75dfff67 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -2645,7 +2645,10 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) | |||
2645 | wdev = rdev_add_virtual_intf(rdev, | 2645 | wdev = rdev_add_virtual_intf(rdev, |
2646 | nla_data(info->attrs[NL80211_ATTR_IFNAME]), | 2646 | nla_data(info->attrs[NL80211_ATTR_IFNAME]), |
2647 | type, err ? NULL : &flags, ¶ms); | 2647 | type, err ? NULL : &flags, ¶ms); |
2648 | if (IS_ERR(wdev)) { | 2648 | if (WARN_ON(!wdev)) { |
2649 | nlmsg_free(msg); | ||
2650 | return -EPROTO; | ||
2651 | } else if (IS_ERR(wdev)) { | ||
2649 | nlmsg_free(msg); | 2652 | nlmsg_free(msg); |
2650 | return PTR_ERR(wdev); | 2653 | return PTR_ERR(wdev); |
2651 | } | 2654 | } |