linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* mac80211 breakage on broadcom hardware.
@ 2008-01-25  1:05 Jory A. Pratt
  2008-01-25  1:17 ` Michael Buesch
  0 siblings, 1 reply; 3+ messages in thread
From: Jory A. Pratt @ 2008-01-25  1:05 UTC (permalink / raw)
  To: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 244 bytes --]

mac80211 appears to be broken by commit 
921dda3b092b3d47c9b715d02be0c2615c8d7aa8 .

An oops occurs on 4306 and 4318 broadcom hardware the minute the device 
attempt to scan for any AP's in the area.
I have attached the oops for review.

-Jory

[-- Attachment #2: debug --]
[-- Type: text/plain, Size: 1835 bytes --]

Pid: 1561, comm: b43 Not tainted 2.6.24-rc8 #1
RIP: 0010:[<ffffffff805dc53e>]  [<ffffffff805dc53e>] ieee80211_sta_scan_work+0x12e/0x200
RSP: 0018:ffff81004597fe70  EFLAGS: 00010282
RAX: 0000000000000000 RBX: dead4ead00000001 RCX: 0000000000000002
RDX: ffff8100459c20c0 RSI: ffff8100458c96e0 RDI: ffff8100459c3028
RBP: ffff8100459c2380 R08: ffff810046816988 R09: 00000000000003c3
R10: 0000000000000000 R11: ffffffff80588120 R12: ffff8100459c3028
R13: ffff8100458c9000 R14: ffff810046816978 R15: 0000000000000000
FS:  00002b292429f130(0000) GS:ffffffff807ae000(0000) knlGS:00000000f7e346c0
CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 00000000007b5d70 CR3: 00000000438c7000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process b43 (pid: 1561, threadinfo ffff81004597e000, task ffff8100459bcf80)
Stack:  0000000000000282 ffff8100459c3030 ffff810046816960 ffff8100459c3028
 ffffffff805dc410 ffffffff80241fb7 ffff810046816988 ffff810046816960
 ffffffff80242920 ffff810046816978 0000000000000000 ffffffff802429c3
Call Trace:
 [<ffffffff805dc410>] ieee80211_sta_scan_work+0x0/0x200
 [<ffffffff80241fb7>] run_workqueue+0x87/0x120
 [<ffffffff80242920>] worker_thread+0x0/0x110
 [<ffffffff802429c3>] worker_thread+0xa3/0x110
 [<ffffffff802461b0>] autoremove_wake_function+0x0/0x30
 [<ffffffff80242920>] worker_thread+0x0/0x110
 [<ffffffff80242920>] worker_thread+0x0/0x110
 [<ffffffff80245deb>] kthread+0x4b/0x80
 [<ffffffff8020c3f8>] child_rip+0xa/0x12
 [<ffffffff80245da0>] kthread+0x0/0x80
 [<ffffffff8020c3ee>] child_rip+0x0/0x12


Code: 3b 43 14 7c 0d 83 bd 98 0c 00 00 01 0f 87 6d ff ff ff 4c 63 
RIP  [<ffffffff805dc53e>] ieee80211_sta_scan_work+0x12e/0x200
 RSP <ffff81004597fe70>
---[ end trace 6fe81bf2464e88d1 ]---

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mac80211 breakage on broadcom hardware.
  2008-01-25  1:05 mac80211 breakage on broadcom hardware Jory A. Pratt
@ 2008-01-25  1:17 ` Michael Buesch
  2008-01-25 12:14   ` Johannes Berg
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Buesch @ 2008-01-25  1:17 UTC (permalink / raw)
  To: Jory A. Pratt; +Cc: linux-wireless, Johannes Berg

On Friday 25 January 2008, Jory A. Pratt wrote:
> 921dda3b092b3d47c9b715d02be0c2615c8d7aa8


Hm, I'm not sure this hunk is correct.


@@ -3194,44 +3223,47 @@ void ieee80211_sta_scan_work(struct work_struct *work)
 
 	switch (local->scan_state) {
 	case SCAN_SET_CHANNEL:
-		mode = local->scan_hw_mode;
-		if (local->scan_hw_mode->list.next == &local->modes_list &&
-		    local->scan_channel_idx >= mode->num_channels) {
+		/* get current scan band */
+		if (local->scan_band < IEEE80211_NUM_BANDS)
+			sband = local->hw.wiphy->bands[local->scan_band];
+		else
+			sband = NULL;
+
+		/* if we started at an unsupported one, advance */
+		while (!sband && local->scan_band < IEEE80211_NUM_BANDS) {
+			local->scan_band++;
+			sband = local->hw.wiphy->bands[local->scan_band];
+			local->scan_channel_idx = 0;
+		}

What are we doing here?
b43 does only define one band (2.4GHz) currently. Is it possible that this code
selects the uninitialized 5GHz band structure?

+
+		if (!sband ||
+		    (local->scan_channel_idx >= sband->n_channels &&
+		     local->scan_band >= IEEE80211_NUM_BANDS)) {
 			ieee80211_scan_completed(local_to_hw(local));
 			return;
 		}
-		skip = !(local->enabled_modes & (1 << mode->mode));
-		chan = &mode->channels[local->scan_channel_idx];
-		if (!(chan->flag & IEEE80211_CHAN_W_SCAN) ||
+		skip = 0;
+		chan = &sband->channels[local->scan_channel_idx];

If the above can happen, this would crash when using "chan".

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mac80211 breakage on broadcom hardware.
  2008-01-25  1:17 ` Michael Buesch
@ 2008-01-25 12:14   ` Johannes Berg
  0 siblings, 0 replies; 3+ messages in thread
From: Johannes Berg @ 2008-01-25 12:14 UTC (permalink / raw)
  To: Michael Buesch; +Cc: Jory A. Pratt, linux-wireless

[-- Attachment #1: Type: text/plain, Size: 1341 bytes --]


> @@ -3194,44 +3223,47 @@ void ieee80211_sta_scan_work(struct work_struct *work)
>  
>  	switch (local->scan_state) {
>  	case SCAN_SET_CHANNEL:
> -		mode = local->scan_hw_mode;
> -		if (local->scan_hw_mode->list.next == &local->modes_list &&
> -		    local->scan_channel_idx >= mode->num_channels) {
> +		/* get current scan band */
> +		if (local->scan_band < IEEE80211_NUM_BANDS)
> +			sband = local->hw.wiphy->bands[local->scan_band];
> +		else
> +			sband = NULL;
> +
> +		/* if we started at an unsupported one, advance */
> +		while (!sband && local->scan_band < IEEE80211_NUM_BANDS) {
> +			local->scan_band++;
> +			sband = local->hw.wiphy->bands[local->scan_band];
> +			local->scan_channel_idx = 0;
> +		}
> 
> What are we doing here?
> b43 does only define one band (2.4GHz) currently. Is it possible that this code
> selects the uninitialized 5GHz band structure?

I thought about this a long time and I'm pretty sure that it cannot
select a NULL band structure as long as there is at least one band
structure which is guaranteed by cfg80211 core code.

scan_band always starts out at IEEE80211_BAND_2GHZ, and once it reaches
NUM_BANDS the scan is aborted, and it can't select NULL bands because
one band is guaranteed to be non-NULL (and after this loop we abort if
sband == NULL)

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-01-25 12:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-25  1:05 mac80211 breakage on broadcom hardware Jory A. Pratt
2008-01-25  1:17 ` Michael Buesch
2008-01-25 12:14   ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).