mac80211: don't allow registering the same rate control twice
authorJohannes Berg <johannes@sipsolutions.net>
Sun, 28 Oct 2007 13:49:33 +0000 (14:49 +0100)
committerDavid S. Miller <davem@sunset.davemloft.net>
Sun, 11 Nov 2007 05:59:43 +0000 (21:59 -0800)
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>
net/mac80211/ieee80211_rate.c

index e4bd848..7254bd6 100644 (file)
@@ -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);