Return-path: Received: from mail-bw0-f227.google.com ([209.85.218.227]:32863 "EHLO mail-bw0-f227.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933036AbZJ3XWX convert rfc822-to-8bit (ORCPT ); Fri, 30 Oct 2009 19:22:23 -0400 MIME-Version: 1.0 In-Reply-To: <1256903425.3555.47.camel@johannes.local> References: <1256885343.3555.0.camel@johannes.local> <1256903425.3555.47.camel@johannes.local> Date: Fri, 30 Oct 2009 19:22:27 -0400 Message-ID: Subject: Re: OOPS in cfg80211_conn_work From: Parag Warudkar To: Johannes Berg Cc: LKML , linux-wireless@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-wireless-owner@vger.kernel.org List-ID: On Friday, October 30, 2009, Johannes Berg wrote: > On Fri, 2009-10-30 at 06:57 -0400, Parag Warudkar wrote: >> >> On Fri, 30 Oct 2009, Johannes Berg wrote: >> >> > On Thu, 2009-10-29 at 19:17 -0400, Parag Warudkar wrote: >> > > Oct 29 18:59:06 parag-laptop kernel: [ ?143.180037] wlan0: >> > > deauthenticating from 00:16:01:d6:6f:12 by local choice (reason=3) >> > > Oct 29 18:59:06 parag-laptop kernel: [ ?143.181137] wlan0: direct >> > > probe to AP 00:16:01:d6:6f:12 (try 1) >> > >> > sorry, I can't read this log. please provide a non-wrapped version >> > >> How does this look? (Sorry sent it in a rush earlier.) >> Below also is a disassembly of cfg80211_conn_work. > > Thanks. I was going to ask for disassembly but you preempted me, I like > that :) > > Since you say you can easily reproduce this, can you try the patch > below? > > johannes > > --- > ?net/wireless/sme.c | ? ?7 +++++-- > ?1 file changed, 5 insertions(+), 2 deletions(-) > > --- wireless-testing.orig/net/wireless/sme.c ? ?2009-10-30 12:48:09.000000000 +0100 > +++ wireless-testing/net/wireless/sme.c 2009-10-30 12:48:41.000000000 +0100 > @@ -165,7 +165,7 @@ void cfg80211_conn_work(struct work_stru > ? ? ? ?struct cfg80211_registered_device *rdev = > ? ? ? ? ? ? ? ?container_of(work, struct cfg80211_registered_device, conn_work); > ? ? ? ?struct wireless_dev *wdev; > - ? ? ? u8 bssid[ETH_ALEN]; > + ? ? ? u8 bssid_buf[ETH_ALEN], *bssid = NULL; > > ? ? ? ?rtnl_lock(); > ? ? ? ?cfg80211_lock_rdev(rdev); > @@ -181,7 +181,10 @@ void cfg80211_conn_work(struct work_stru > ? ? ? ? ? ? ? ? ? ? ? ?wdev_unlock(wdev); > ? ? ? ? ? ? ? ? ? ? ? ?continue; > ? ? ? ? ? ? ? ?} > - ? ? ? ? ? ? ? memcpy(bssid, wdev->conn->params.bssid, ETH_ALEN); > + ? ? ? ? ? ? ? if (wdev->conn->params.bssid) { > + ? ? ? ? ? ? ? ? ? ? ? memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN); > + ? ? ? ? ? ? ? ? ? ? ? bssid = bssid_buf; > + ? ? ? ? ? ? ? } > ? ? ? ? ? ? ? ?if (cfg80211_conn_do_work(wdev)) > ? ? ? ? ? ? ? ? ? ? ? ?__cfg80211_connect_result( > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?wdev->netdev, bssid, > > Seems to have fixed it. Thanks Johannes.