Return-path: Received: from xc.sipsolutions.net ([83.246.72.84]:42495 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756489AbZJ3LuW (ORCPT ); Fri, 30 Oct 2009 07:50:22 -0400 Subject: Re: OOPS in cfg80211_conn_work From: Johannes Berg To: Parag Warudkar Cc: LKML , linux-wireless@vger.kernel.org In-Reply-To: References: <1256885343.3555.0.camel@johannes.local> Content-Type: text/plain; charset="UTF-8" Date: Fri, 30 Oct 2009 12:50:25 +0100 Message-ID: <1256903425.3555.47.camel@johannes.local> Mime-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: 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,