From patchwork Fri Jun 21 08:26:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chun-Yeow Yeoh X-Patchwork-Id: 2761051 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 015E19F756 for ; Fri, 21 Jun 2013 08:30:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 94D702018A for ; Fri, 21 Jun 2013 08:30:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 718AB20186 for ; Fri, 21 Jun 2013 08:30:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161387Ab3FUIaH (ORCPT ); Fri, 21 Jun 2013 04:30:07 -0400 Received: from mail-pb0-f49.google.com ([209.85.160.49]:57066 "EHLO mail-pb0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161250Ab3FUIaC (ORCPT ); Fri, 21 Jun 2013 04:30:02 -0400 Received: by mail-pb0-f49.google.com with SMTP id jt11so7471372pbb.36 for ; Fri, 21 Jun 2013 01:30:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=xrGxNcQiEaihDK7eiTXE4MULRXDSFew8mlDtBcaBtDw=; b=SK1SSO+6F1mgrlQo8RQm4ZJGKX5LznybagYXU/TYu7nW8rcD9qa0cqVkzKjq2sX3sj vnvbDhJ0Em6Gfb/LcLATVh0GzP1ikIp6Rpk0lzPaf2dwIKML3i3bu6mwXEgRjVdRjoon kfp23ORyONKJuwuxf3CA5VuCzzn1HkcXQvpJJdu+xDW754PFrnf9YFcqtVo634/oGDe9 pBu7ML0xHbq/613anEN5rf7fuCK4JUVSmqLR7kR1he3YoyNZtanzSFibTOnH/R41f9OC JymI7sj+hn3NN2V7LRiQIM7+gQD7f+3UKGyIpVCEr+DWMhrx/MK7aqM838R1jROwjWmB nSiQ== X-Received: by 10.66.163.38 with SMTP id yf6mr15055276pab.45.1371803401797; Fri, 21 Jun 2013 01:30:01 -0700 (PDT) Received: from localhost.localdomain ([58.26.233.146]) by mx.google.com with ESMTPSA id o10sm3918183pbq.39.2013.06.21.01.29.58 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 21 Jun 2013 01:30:00 -0700 (PDT) From: Chun-Yeow Yeoh To: linux-wireless@vger.kernel.org Cc: johannes@sipsolutions.net, linville@tuxdriver.com, devel@lists.open80211s.org, Chun-Yeow Yeoh Subject: [PATCH] mac80211: fix the kernel panic on ath_tx_aggr_wakeup on mesh Date: Fri, 21 Jun 2013 16:26:55 +0800 Message-Id: <1371803215-2685-1-git-send-email-yeohchunyeow@gmail.com> X-Mailer: git-send-email 1.7.0.4 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The is to fix the kernel panic happens if user space inserts the mesh STA and not proceed with the SAE and AMPE, and later the same mesh STA is detected again. The sta_state of the mesh STA remains at IEEE80211_STA_NONE and if the ieee80211_sta_ps_deliver_wakeup is called and subsequently the ath_tx_aggr_wakeup, the kernel panic due to ath_tx_node_init is not called before to initialize the require data structures. This issue is reported by Cedric Voncken before. http://www.spinics.net/lists/linux-wireless/msg106342.html [<831ea6b4>] ath_tx_aggr_wakeup+0x44/0xcc [ath9k] [<83084214>] ieee80211_sta_ps_deliver_wakeup+0xb8/0x208 [mac80211] [<830b9824>] ieee80211_mps_sta_status_update+0x94/0x108 [mac80211] [<83099398>] ieee80211_sta_ps_transition+0xc94/0x34d8 [mac80211] [<8022399c>] nf_iterate+0x98/0x104 [<8309bb60>] ieee80211_sta_ps_transition+0x345c/0x34d8 [mac80211] Thomas Perdersen also mentioned that this patch has fixed the bad sta magic warning in mac80211_hwsim_set_tim() when applied to mac80211-next/master Signed-off-by: Chun-Yeow Yeoh --- net/mac80211/mesh_ps.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/net/mac80211/mesh_ps.c b/net/mac80211/mesh_ps.c index 3b7bfc0..0e42758 100644 --- a/net/mac80211/mesh_ps.c +++ b/net/mac80211/mesh_ps.c @@ -251,7 +251,8 @@ void ieee80211_mps_sta_status_update(struct sta_info *sta) mps_dbg(sta->sdata, "start PS buffering frames towards %pM\n", sta->sta.addr); } else { - ieee80211_sta_ps_deliver_wakeup(sta); + if (sta->sta_state >= IEEE80211_STA_ASSOC) + ieee80211_sta_ps_deliver_wakeup(sta); } /* clear the MPSP flags for non-peers or active STA */