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: 7008151 X-Patchwork-Delegate: kvalo@adurom.com 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.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id A35BA9F44C for ; Thu, 13 Aug 2015 12:10:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A605E20461 for ; Thu, 13 Aug 2015 12:10:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2293220459 for ; Thu, 13 Aug 2015 12:10:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751877AbbHMMKV (ORCPT ); Thu, 13 Aug 2015 08:10:21 -0400 Received: from mail-lb0-f169.google.com ([209.85.217.169]:35559 "EHLO mail-lb0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751517AbbHMMKU (ORCPT ); Thu, 13 Aug 2015 08:10:20 -0400 Received: by lbcbn3 with SMTP id bn3so25641832lbc.2 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=knuw4k2tEaZAKq5mWTI6Ejr9tgsWIlj9ycaEFtAum89HSGvyGE+VfwVqnnptk/hHv+ GT4TWvL30gyX8okov7gwQa7OY0cStB6PiMW+VT86P3irlyKvIa6lvjWnM+kbjIGTrsV3 fm1eb5rCMuihBtq1oz6sUHB5smJTstXLfmjYPx6HhKZM+IHUht2JcAwdxBwuXSLGAjHW D8KkrmBdVvZpqfZxWuldyqFiUmIrOIp0bxuPY3mPHFGIkzMOLtAdH/NPVFsOMUiUUW2j SOC1um2iz2xpkTQRx4wZLocwbLLy4+lApXhGK6YHYXsnkqAVQ+3lYWFbWYm/u1HQd6wJ 7scA== X-Gm-Message-State: ALoCoQkfjqvsUuymqiiYF9IeHKoNgjGfS3CuHAWSWpNNeBNbwnsfY8ckovgbP3gsdRE25jozYOy5SdEsRQwWR7wLPezZYbMkR2EbUSOz7H3vm6Hw+iUzgMp4tHfWOOkhe1gSNEHNCnPw 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 Cc: linux-wireless@vger.kernel.org, Michal Kazior 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 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, 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 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;