Skip to content

Commit

Permalink
wl12xx: Add mutex protection for interface list
Browse files Browse the repository at this point in the history
The interface list maintained in main.c is not mutex protected. This could
cause issues, as the list is accessed from notifier chains.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
  • Loading branch information
Juuso Oikarinen authored and Luciano Coelho committed Apr 19, 2011
1 parent 1d732e8 commit f9f774c
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,7 @@ static struct platform_device wl1271_device = {
},
};

static DEFINE_MUTEX(wl_list_mutex);
static LIST_HEAD(wl_list);

static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
Expand Down Expand Up @@ -369,10 +370,12 @@ static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
return NOTIFY_DONE;

wl_temp = hw->priv;
mutex_lock(&wl_list_mutex);
list_for_each_entry(wl, &wl_list, list) {
if (wl == wl_temp)
break;
}
mutex_unlock(&wl_list_mutex);
if (wl != wl_temp)
return NOTIFY_DONE;

Expand Down Expand Up @@ -1390,8 +1393,10 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
out:
mutex_unlock(&wl->mutex);

mutex_lock(&wl_list_mutex);
if (!ret)
list_add(&wl->list, &wl_list);
mutex_unlock(&wl_list_mutex);

return ret;
}
Expand All @@ -1404,7 +1409,9 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl)

wl1271_info("down");

mutex_lock(&wl_list_mutex);
list_del(&wl->list);
mutex_unlock(&wl_list_mutex);

WARN_ON(wl->state != WL1271_STATE_ON);

Expand Down

0 comments on commit f9f774c

Please sign in to comment.