Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2607283pxb; Sun, 31 Oct 2021 20:33:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy9lJzMqY1PaYFqnlH/SRSeCgtDfvCA9Xn/Ij7fxgQOgJAQ3hoOtwAq3spx0MTpMIee8QcW X-Received: by 2002:aa7:cd88:: with SMTP id x8mr36649844edv.203.1635737631681; Sun, 31 Oct 2021 20:33:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635737631; cv=none; d=google.com; s=arc-20160816; b=TPq98K3OoJu0Cxwx6JIL/UT4Xza2OLi2Y+1t/1J5yAxaIgOOxJTHjEqPvHNgchQKfM XzjPQxukEOzQHHKW3d7BuuiF3qT/HWlDQKtUHbG3UQO8GNfBSDLn+KznugRzQlqxeA/P v1hFJY1LBVkwx4TJFKo6DaMhlCLlKwUyj993fOhoHY1LhweKwPtt0NY9T8eb7tPM5i3i s0Y5pqGOp6/7wWJN4Zvzunjl4cc6zcI4AzLTO13TrjpPRT6+BXdMh/0SHAFecdQUZGcK +ZyXyQ3vQPfcgHOEoH7R8bx02N1GqlzTPVps8GE2Vne1Je8FUqnQeHofl18VPTjV5QP0 GbPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=kvZgLPilkGc/yFOwR0YVSJfLkcBEe+jYxHZtIG6+Kko=; b=Cp1D6H94WHPd8wl+R9d/0z30bFuvo9anubmzsUn++38iKxrpFOupFej8gc6zmeLwfa HAZz9x8ZsIpVBtJxokLck5BemIdIdoCuX8ivNBUNYEnyS/RcRi3LpJ85bNjyS5WoKwll uyudJcCCXDu1lAOF8iNmJbHuIbkiB8LBzMWf/zgVau3d9wqmvlaixSnEYWzer593C4kZ AtCQ6GxW2bLLeGItUGBkLNrN262Xxr5ACrQao8SysKfwPWR+gccoZoWyAoR6Lz8i2v09 q1rWsFTvdDdrcFSf3OOX6HFyuvO+nOEadQBiS45nBPwBsvRZNqDTPtPvumJuwGF/ZjIH i5lw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h7si6646097ede.403.2021.10.31.20.33.28; Sun, 31 Oct 2021 20:33:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230237AbhKADfz (ORCPT + 65 others); Sun, 31 Oct 2021 23:35:55 -0400 Received: from mailgw01.mediatek.com ([60.244.123.138]:36228 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S230222AbhKADfy (ORCPT ); Sun, 31 Oct 2021 23:35:54 -0400 X-UUID: c10969fe3e3a4d73be86f0651839fcf1-20211101 X-UUID: c10969fe3e3a4d73be86f0651839fcf1-20211101 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 440057701; Mon, 01 Nov 2021 11:33:17 +0800 Received: from MTKMBS34N1.mediatek.inc (172.27.4.172) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 1 Nov 2021 11:33:15 +0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS34N1.mediatek.inc (172.27.4.172) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 1 Nov 2021 11:33:13 +0800 Received: from mcddlt001.gcn.mediatek.inc (10.19.240.15) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 1 Nov 2021 11:33:13 +0800 From: Xing Song To: Felix Fietkau CC: Lorenzo Bianconi , Shayne Chen , Ryder Lee , Evelyn Tsai , , , Xing Song Subject: [PATCH] mt76: do not pass the received frame with decryption error Date: Mon, 1 Nov 2021 11:32:58 +0800 Message-ID: <20211101033258.144962-1-xing.song@mediatek.com> X-Mailer: git-send-email 2.17.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Drop the received frame if decryption failed with the given key. Signed-off-by: Xing Song --- drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 4 ++++ drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 4 ++++ drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 4 ++++ drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/mac.c b/drivers/net/wireless/mediatek/mt76/mt7603/mac.c index fe03e31989bb..b6f2366d155e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7603/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7603/mac.c @@ -525,6 +525,10 @@ mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb) if (rxd2 & MT_RXD2_NORMAL_TKIP_MIC_ERR) status->flag |= RX_FLAG_MMIC_ERROR; + /* ICV error or CCMP/BIP/WPI MIC error */ + if (rxd2 & MT_RXD2_NORMAL_ICV_ERR) + return -EINVAL; + if (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2) != 0 && !(rxd2 & (MT_RXD2_NORMAL_CLM | MT_RXD2_NORMAL_CM))) { status->flag |= RX_FLAG_DECRYPTED; diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c index 423f69015e3e..523214837b99 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c @@ -286,6 +286,10 @@ static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb) if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR) return -EINVAL; + /* ICV error or CCMP/BIP/WPI MIC error */ + if (rxd2 & MT_RXD2_NORMAL_ICV_ERR) + return -EINVAL; + unicast = (rxd1 & MT_RXD1_NORMAL_ADDR_TYPE) == MT_RXD1_NORMAL_U2M; idx = FIELD_GET(MT_RXD2_NORMAL_WLAN_IDX, rxd2); hdr_trans = rxd1 & MT_RXD1_NORMAL_HDR_TRANS; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 5fcf35f2d9fb..58c99e3d1a2d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -426,6 +426,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR) return -EINVAL; + /* ICV error or CCMP/BIP/WPI MIC error */ + if (rxd1 & MT_RXD1_NORMAL_ICV_ERR) + return -EINVAL; + unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M; idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1); hdr_trans = rxd2 & MT_RXD2_NORMAL_HDR_TRANS; diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c index db3302b1576a..9ebd311e395f 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c @@ -428,6 +428,10 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb) if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR) return -EINVAL; + /* ICV error or CCMP/BIP/WPI MIC error */ + if (rxd1 & MT_RXD1_NORMAL_ICV_ERR) + return -EINVAL; + chfreq = FIELD_GET(MT_RXD3_NORMAL_CH_FREQ, rxd3); unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M; idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1); -- 2.17.0