aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-02-21 14:09:30 +0100
committerJohn W. Linville <linville@tuxdriver.com>2008-02-29 15:41:34 -0500
commit43ba7e958f2ca05e4e9171a15402288419289d71 (patch)
tree15b7a04a7db402dd286f83cc56c21b336189da09 /net/mac80211/sta_info.h
parentd46e144b65bf053b25d134ec9f52a38e63e04bb4 (diff)
downloadkernel_goldelico_gta04-43ba7e958f2ca05e4e9171a15402288419289d71.zip
kernel_goldelico_gta04-43ba7e958f2ca05e4e9171a15402288419289d71.tar.gz
kernel_goldelico_gta04-43ba7e958f2ca05e4e9171a15402288419289d71.tar.bz2
mac80211: atomically check whether STA exists already
When a STA structure is added, it is often checked whether it already exists before adding it. This, however, isn't done atomically so there is a race condition that could lead to two STA structures being added with the same MAC address. This patch changes sta_info_add() to return an ERR_PTR in case of failure and adds the failure mode -EEXIST when the STA already exists. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Cc: Luis Carlos Cobo <luisca@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r--net/mac80211/sta_info.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index f7e65fa..7b5be30 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -239,8 +239,8 @@ static inline void __sta_info_get(struct sta_info *sta)
struct sta_info * sta_info_get(struct ieee80211_local *local, u8 *addr);
void sta_info_put(struct sta_info *sta);
-struct sta_info * sta_info_add(struct ieee80211_local *local,
- struct net_device *dev, u8 *addr, gfp_t gfp);
+struct sta_info *sta_info_add(struct ieee80211_local *local,
+ struct net_device *dev, u8 *addr, gfp_t gfp);
void sta_info_remove(struct sta_info *sta);
void sta_info_free(struct sta_info *sta);
void sta_info_init(struct ieee80211_local *local);