All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Luis R. Rodriguez" <lrodriguez@atheros.com>
To: <linville@tuxdriver.com>
Cc: <mark@moxienet.com>, <linux-wireless@vger.kernel.org>,
	"Luis R. Rodriguez" <lrodriguez@atheros.com>, <stable@kernel.org>
Subject: [PATCH] cfg80211: Fix regulatory bug with multiple cards with a delayed CRDA response
Date: Thu, 11 Nov 2010 18:27:23 -0800	[thread overview]
Message-ID: <1289528843-21982-1-git-send-email-lrodriguez@atheros.com> (raw)

When two cards are connected with the same regulatory domain
if CRDA had a delayed response then cfg80211's own set regulatory
domain would still be the world regulatory domain. There was a bug
on cfg80211's ignore_request() when analyzing incoming driver
regulatory hints as it was only checking against the currently
set cfg80211 regulatory domain and not for any other new
pending requests. This is easily fixed by also checking against
the pending request.

Without this fix the second card would end up with an intersected
regulatory domain and now allow it to use the channels it really
is designed for.

This was reproduced and tested against mac80211_hwsim using this
CRDA delayer:

	#!/bin/bash
	echo $COUNTRY >> /tmp/log
	sleep 2
	/sbin/crda.orig

And this regulatory test:

	modprobe mac80211_hwsim regtest=2

This patch has fixes for cfg80211 all the way back.

Reported-by: Mark Mentovai <mark@moxienet.com>
Cc: stable@kernel.org
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 net/wireless/reg.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 3be18d9..ecac993 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1281,9 +1281,13 @@ static int ignore_request(struct wiphy *wiphy,
 		 * This would happen if you unplug and plug your card
 		 * back in or if you add a new device for which the previously
 		 * loaded card also agrees on the regulatory domain.
+		 * This can also happen if you have two cards both with the
+		 * same regulatory domain and CRDA hasn't yet replied back
+		 * with the last request's regulatory domain.
 		 */
 		if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
-		    !regdom_changes(pending_request->alpha2))
+		    (!regdom_changes(pending_request->alpha2) ||
+		     alpha2_equal(last_request->alpha2, pending_request->alpha2)))
 			return -EALREADY;
 
 		return REG_INTERSECT;
-- 
1.7.1


             reply	other threads:[~2010-11-12  2:27 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-12  2:27 Luis R. Rodriguez [this message]
2010-11-12  2:45 ` [PATCH] cfg80211: Fix regulatory bug with multiple cards with a delayed CRDA response Luis R. Rodriguez
2010-11-12  2:53   ` Luis R. Rodriguez
2010-11-12  6:05 ` Mark Mentovai
2010-11-12 20:27   ` Luis R. Rodriguez
2010-11-16  0:06     ` Luis R. Rodriguez
2010-11-16  0:33       ` Luis R. Rodriguez
2010-11-16  3:34       ` Mark Mentovai
2010-11-16 20:27         ` Luis R. Rodriguez
2010-11-16 21:34           ` Mark Mentovai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1289528843-21982-1-git-send-email-lrodriguez@atheros.com \
    --to=lrodriguez@atheros.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=mark@moxienet.com \
    --cc=stable@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.