From patchwork Thu Aug 13 12:10:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kazior X-Patchwork-Id: 7008171 Return-Path: X-Original-To: patchwork-ath10k@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 55EA9C05AC for ; Thu, 13 Aug 2015 12:10:52 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 654A120462 for ; Thu, 13 Aug 2015 12:10:51 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 854B720459 for ; Thu, 13 Aug 2015 12:10:50 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZPrLI-0007tp-UZ; Thu, 13 Aug 2015 12:10:44 +0000 Received: from mail-lb0-x235.google.com ([2a00:1450:4010:c04::235]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZPrLF-0007mA-EQ for ath10k@lists.infradead.org; Thu, 13 Aug 2015 12:10:43 +0000 Received: by lbbsx3 with SMTP id sx3so25792108lbb.0 for ; Thu, 13 Aug 2015 05:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tieto.com; s=google; h=from:to:cc:subject:date:message-id; bh=DmRodbmEzS4Xm+FPnK/vUMpsT7lMY7dFr5aa4IFwRYU=; b=wzA0O74zbaNRnr7Z7/tgAVN44i2MCeqXCZG8kc7myHbVqV6JEj4xfhSN+pfdE5vfgz +hHwhd3S8cEb8fi+mRDCFGxKcYKp8Kqa8qCngK6KYArGBRiO3r6J/pAhOqfUTzXTy8Wi oLagzV7DzbRMJYi7IaeNyIJD4j7gXQJyoJNnw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=DmRodbmEzS4Xm+FPnK/vUMpsT7lMY7dFr5aa4IFwRYU=; b=Wg16qISHH8/En++FJwtAYpwp4WnMTDrnyH8qCyNVYyuVmc7Lkq+ZHnsqpmCPBmKOmU cuhT4QTvKqYiowfWQyJjQiCpgfi89K85xwj3xQAOjo+dnIaceN8v7rEAQG/SZZpSExAy BBumSAuQWTM8hAeMlUUuA2tX4uKAS4bzOOV253F8EsmLdKqaSFAnh5sxm4dMUPZ5KpMx vdOr3k3khYD0I/b0kGM/ZQ9z2cCN9HVMQf9l/q2TM3iyj9aHCrvVvgowvffj+vu7DN69 gkXWfo/zoRZdwwZcsSsPRoYH9cwVkXkgHnooAYunxrGQQgk3v3SRShmeEJ1rRhNcVwvD L7zA== X-Gm-Message-State: ALoCoQmb2c5Q3qWru58QszujK6AKX82TCMGECGkQMkpbJC3zNgjQ+c1tTmuQpRdGl0jMmE7JP5wdzeN837a1eI+JYmoxUCf/BKjhVcI4wQDwfdyy3tfgKYej0SmQfVtw/PaDPhO6hVFfpnJLtEecxdCQN2wSl+7751F3fgCkWotNL0LOu2WwsECBW5nKfLNV3bkKNZfazDXe X-Received: by 10.112.171.68 with SMTP id as4mr36309330lbc.64.1439467819292; Thu, 13 Aug 2015 05:10:19 -0700 (PDT) Received: from localhost.localdomain ([91.198.246.10]) by smtp.gmail.com with ESMTPSA id lu1sm499018lac.37.2015.08.13.05.10.17 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 13 Aug 2015 05:10:18 -0700 (PDT) From: Michal Kazior To: ath10k@lists.infradead.org Subject: [PATCH] ath10k: split ap/ibss wep key install process Date: Thu, 13 Aug 2015 14:10:46 +0200 Message-Id: <1439467846-8351-1-git-send-email-michal.kazior@tieto.com> X-Mailer: git-send-email 2.1.4 X-DomainID: tieto.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150813_051041_922799_629FFA40 X-CRM114-Status: GOOD ( 12.20 ) X-Spam-Score: -2.7 (--) X-BeenThere: ath10k@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-wireless@vger.kernel.org, Michal Kazior MIME-Version: 1.0 Sender: "ath10k" Errors-To: ath10k-bounces+patchwork-ath10k=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable 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 Apparently it's not safe to install both pairwise and groupwise keys on AP vdevs as it can cause traffic to stop working in some multi-vif (WPA+WEP) cases. Fixes: ce90b27128c2 ("ath10k: fix multiple key static wep with ibss") Signed-off-by: Michal Kazior --- drivers/net/wireless/ath/ath10k/mac.c | 44 +++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index acd222f3b899..eabfe68a1c48 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -247,6 +247,10 @@ static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, lockdep_assert_held(&ar->conf_mutex); + if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP && + arvif->vif->type != NL80211_IFTYPE_ADHOC)) + return -EINVAL; + spin_lock_bh(&ar->data_lock); peer = ath10k_peer_find(ar, arvif->vdev_id, addr); spin_unlock_bh(&ar->data_lock); @@ -258,21 +262,34 @@ static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, if (arvif->wep_keys[i] == NULL) continue; - flags = 0; - flags |= WMI_KEY_PAIRWISE; + switch (arvif->vif->type) { + case NL80211_IFTYPE_AP: + flags = WMI_KEY_PAIRWISE; - ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY, - addr, flags); - if (ret < 0) - return ret; + if (arvif->def_wep_key_idx == i) + flags |= WMI_KEY_TX_USAGE; - flags = 0; - flags |= WMI_KEY_GROUP; + ret = ath10k_install_key(arvif, arvif->wep_keys[i], + SET_KEY, addr, flags); + if (ret < 0) + return ret; + break; + case NL80211_IFTYPE_ADHOC: + ret = ath10k_install_key(arvif, arvif->wep_keys[i], + SET_KEY, addr, + WMI_KEY_PAIRWISE); + if (ret < 0) + return ret; - ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY, - addr, flags); - if (ret < 0) - return ret; + ret = ath10k_install_key(arvif, arvif->wep_keys[i], + SET_KEY, addr, WMI_KEY_GROUP); + if (ret < 0) + return ret; + break; + default: + WARN_ON(1); + return -EINVAL; + } spin_lock_bh(&ar->data_lock); peer->keys[i] = arvif->wep_keys[i]; @@ -287,6 +304,9 @@ static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, * * FIXME: Revisit. Perhaps this can be done in a less hacky way. */ + if (arvif->vif->type != NL80211_IFTYPE_ADHOC) + return 0; + if (arvif->def_wep_key_idx == -1) return 0;