Skip to content

Commit

Permalink
wireless: convert reg_regdb_search_lock to mutex
Browse files Browse the repository at this point in the history
Stanse discovered that kmalloc is being called with GFP_KERNEL while
holding this spinlock.  The spinlock can be a mutex instead, which also
enables the removal of the unlock/lock around the lock/unlock of
cfg80211_mutex and the call to set_regdom.

Reported-by: Jiri Slaby <jirislaby@gmail.com>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
John W. Linville committed Mar 30, 2010
1 parent c8406ea commit 368d06f
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions net/wireless/reg.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,15 +324,15 @@ struct reg_regdb_search_request {
};

static LIST_HEAD(reg_regdb_search_list);
static DEFINE_SPINLOCK(reg_regdb_search_lock);
static DEFINE_MUTEX(reg_regdb_search_mutex);

static void reg_regdb_search(struct work_struct *work)
{
struct reg_regdb_search_request *request;
const struct ieee80211_regdomain *curdom, *regdom;
int i, r;

spin_lock(&reg_regdb_search_lock);
mutex_lock(&reg_regdb_search_mutex);
while (!list_empty(&reg_regdb_search_list)) {
request = list_first_entry(&reg_regdb_search_list,
struct reg_regdb_search_request,
Expand All @@ -346,18 +346,16 @@ static void reg_regdb_search(struct work_struct *work)
r = reg_copy_regd(&regdom, curdom);
if (r)
break;
spin_unlock(&reg_regdb_search_lock);
mutex_lock(&cfg80211_mutex);
set_regdom(regdom);
mutex_unlock(&cfg80211_mutex);
spin_lock(&reg_regdb_search_lock);
break;
}
}

kfree(request);
}
spin_unlock(&reg_regdb_search_lock);
mutex_unlock(&reg_regdb_search_mutex);
}

static DECLARE_WORK(reg_regdb_work, reg_regdb_search);
Expand All @@ -375,9 +373,9 @@ static void reg_regdb_query(const char *alpha2)

memcpy(request->alpha2, alpha2, 2);

spin_lock(&reg_regdb_search_lock);
mutex_lock(&reg_regdb_search_mutex);
list_add_tail(&request->list, &reg_regdb_search_list);
spin_unlock(&reg_regdb_search_lock);
mutex_unlock(&reg_regdb_search_mutex);

schedule_work(&reg_regdb_work);
}
Expand Down

0 comments on commit 368d06f

Please sign in to comment.