diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-08-06 14:41:33 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-14 09:12:46 -0400 |
commit | e458b8a22d33eef62765c9f89889efeb4041f073 (patch) | |
tree | e738ffebfecb0e461ca033528dd39a8b86839770 /net/wireless/mlme.c | |
parent | e21546a2a3953a7d4b9d5c9b1cf12184ffceab96 (diff) |
cfg80211: fix nl80211 disconnected events
When reporting a disconnection to userspace, we try
to report whether it was from the AP or by our own
choice. However, we misreported a broadcast deauth
or disassoc as being by own choice, which is wrong.
Fix this by checking the sender address instead of
the destination address.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/mlme.c')
-rw-r--r-- | net/wireless/mlme.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index b44b6c024c14..51d5df67c632 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c | |||
@@ -149,7 +149,7 @@ static void __cfg80211_send_deauth(struct net_device *dev, | |||
149 | 149 | ||
150 | reason_code = le16_to_cpu(mgmt->u.deauth.reason_code); | 150 | reason_code = le16_to_cpu(mgmt->u.deauth.reason_code); |
151 | 151 | ||
152 | from_ap = memcmp(mgmt->da, dev->dev_addr, ETH_ALEN) == 0; | 152 | from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; |
153 | __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); | 153 | __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); |
154 | } else if (wdev->sme_state == CFG80211_SME_CONNECTING) { | 154 | } else if (wdev->sme_state == CFG80211_SME_CONNECTING) { |
155 | __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, NULL, 0, | 155 | __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, NULL, 0, |
@@ -215,7 +215,7 @@ static void __cfg80211_send_disassoc(struct net_device *dev, | |||
215 | 215 | ||
216 | reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); | 216 | reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); |
217 | 217 | ||
218 | from_ap = memcmp(mgmt->da, dev->dev_addr, ETH_ALEN) == 0; | 218 | from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; |
219 | __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); | 219 | __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); |
220 | } | 220 | } |
221 | 221 | ||