diff options
author | Jouni Malinen <j@w1.fi> | 2009-04-18 14:53:15 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-04-20 16:36:26 -0400 |
commit | d91c01c757bd9659ac10549504586fae610265a4 (patch) | |
tree | 17bfe2494a8798f4902892ac1854f301306e5d5f /net/wireless | |
parent | e10a9dfc35ae6bd62bbb83df08297ea06b54d9ce (diff) |
nl80211: Make nl80211_send_mlme_event() atomic
One of the code paths sending deauth/disassoc events ends up calling
this function with rcu_read_lock held, so we must use GFP_ATOMIC in
allocation routines.
Reported-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Jouni Malinen <j@w1.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 353e1a4ece83..2456e4ee445e 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -3334,7 +3334,7 @@ static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, | |||
3334 | struct sk_buff *msg; | 3334 | struct sk_buff *msg; |
3335 | void *hdr; | 3335 | void *hdr; |
3336 | 3336 | ||
3337 | msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); | 3337 | msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC); |
3338 | if (!msg) | 3338 | if (!msg) |
3339 | return; | 3339 | return; |
3340 | 3340 | ||
@@ -3353,7 +3353,7 @@ static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, | |||
3353 | return; | 3353 | return; |
3354 | } | 3354 | } |
3355 | 3355 | ||
3356 | genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, GFP_KERNEL); | 3356 | genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, GFP_ATOMIC); |
3357 | return; | 3357 | return; |
3358 | 3358 | ||
3359 | nla_put_failure: | 3359 | nla_put_failure: |