diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2007-10-28 14:49:33 +0100 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-11-10 21:59:43 -0800 |
commit | 999acd9c339a761a18d625b13001612ac396ee00 (patch) | |
tree | 57498e6de24beb8a998e3a14743e8b7d73869e60 /net | |
parent | 2bf236d55e5ea2b92ed5235af09997c2995b316b (diff) | |
download | kernel_samsung_smdk4412-999acd9c339a761a18d625b13001612ac396ee00.zip kernel_samsung_smdk4412-999acd9c339a761a18d625b13001612ac396ee00.tar.gz kernel_samsung_smdk4412-999acd9c339a761a18d625b13001612ac396ee00.tar.bz2 |
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/ieee80211_rate.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_rate.c b/net/mac80211/ieee80211_rate.c index e4bd848..7254bd6 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); |