aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2007-10-28 14:49:33 +0100
committerDavid S. Miller <davem@sunset.davemloft.net>2007-11-10 21:59:43 -0800
commit999acd9c339a761a18d625b13001612ac396ee00 (patch)
tree57498e6de24beb8a998e3a14743e8b7d73869e60
parentrfkill: Use subsys_initcall (diff)
downloadlinux-dev-999acd9c339a761a18d625b13001612ac396ee00.tar.xz
linux-dev-999acd9c339a761a18d625b13001612ac396ee00.zip
mac80211: don't allow registering the same rate control twice
Previously, mac80211 would allow registering the same rate control algorithm twice. This is a programming error in the registration and should not happen; additionally the second version could never be selected. Disallow this and warn about it. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/ieee80211_rate.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_rate.c b/net/mac80211/ieee80211_rate.c
index e4bd8481554d..7254bd609839 100644
--- a/net/mac80211/ieee80211_rate.c
+++ b/net/mac80211/ieee80211_rate.c
@@ -28,13 +28,22 @@ int ieee80211_rate_control_register(struct rate_control_ops *ops)
if (!ops->name)
return -EINVAL;
+ mutex_lock(&rate_ctrl_mutex);
+ list_for_each_entry(alg, &rate_ctrl_algs, list) {
+ if (!strcmp(alg->ops->name, ops->name)) {
+ /* don't register an algorithm twice */
+ WARN_ON(1);
+ return -EALREADY;
+ }
+ }
+
alg = kzalloc(sizeof(*alg), GFP_KERNEL);
if (alg == NULL) {
+ mutex_unlock(&rate_ctrl_mutex);
return -ENOMEM;
}
alg->ops = ops;
- mutex_lock(&rate_ctrl_mutex);
list_add_tail(&alg->list, &rate_ctrl_algs);
mutex_unlock(&rate_ctrl_mutex);