Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1653077pxy; Mon, 2 Aug 2021 07:08:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwL5+XpkpAYgVamRNCksNriT6O/8dbqO86/qHelCpYw4XSkAoZPMhCGs3L9MXGFYZdGVWFS X-Received: by 2002:a5e:9513:: with SMTP id r19mr11998284ioj.156.1627913294507; Mon, 02 Aug 2021 07:08:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627913294; cv=none; d=google.com; s=arc-20160816; b=SaOOdqSR3CtCinDTKxhNCl7BylV5+eqZXvsDFsUWpODkm1oneTaM1j/S+jLnQfunpk 9//4fzov0KCMMHphgHh9ngfQK1dzArrSCWXOluS6GmfyCEhg5J46Ks08PYOpPA3OhB7l kkD/YL7lXA4/8kpwz/3UwgyAJ70FqPMET1zZIx5Xb9Gt1U2bYmtGalqazio0MZGM3q3J EkttvDGsuAgvpP1Pon9eTPuzh/W7QguC0ixz8BtyBjG0crhH60xyslJpuSKkV1y2V6Tr y18wnQLayv/boO420Le+oGzR9ji4KiRjHztM/EIS34MRFSQ53ofwJbM4yI2D9SEpqQ64 SFfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=lwzPPVapmCBJaB4pZKPKjOMyfrmznvy9yMuTKM4lxNw=; b=Sv1HNX9PJH0XEqzVgfPuG9ruRQuCLAaVWYV4FRNVkse2gFOkKRFy0DhdJORRtpeCqy upDSxHzoPXL0khb4L7ubf1nRLRTN2EQWHDLF7UvVbl0P7ZjwBUMeJtIDTc3kNNmDkAP1 gRU5DRR1YL6ebNnD5eaVi86isKP4JoBjSYBmJusVnEn+Y0GF0Hxo6b76pHoT9Ir43bZR OfB+mBW4PbOCZA8cNDeHqpHDlafwTezmxi1I0k8UZ0k9JYu35Asmnvg/L/Pq1mDEKbuh C3PuSaJeFDx4kryMYVB7ZS4uwQJ2UFYlZokHHvV6yhMYFLyD0iMs/k7EuSjsmFlp/vEb WAuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qBJbta2l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s13si13486801ilp.102.2021.08.02.07.08.03; Mon, 02 Aug 2021 07:08:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qBJbta2l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236314AbhHBOF7 (ORCPT + 99 others); Mon, 2 Aug 2021 10:05:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:40308 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236448AbhHBN7b (ORCPT ); Mon, 2 Aug 2021 09:59:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F0FC161168; Mon, 2 Aug 2021 13:55:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627912548; bh=0SxXdrzgCMf+XGpPMBcK0MfRTFpmHNYKS0tjM7kJg/8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qBJbta2lAtAV/Cn9tFlIwkHg4YhKZAL3Cg8djdgdzbJE3LVOJjadfbtipGFHpZOGh QHZ0fGLeN3fwqBc58LospUVaRWtm2vm+bhxYjSYVu6YRzLZ7YR4RCETLCxvJQq2CRi 2FP9TP6G5fHChbEy9JTcPbwk5R4qnn85FUIFwbkU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Felix Fietkau , Johannes Berg , Sasha Levin Subject: [PATCH 5.13 042/104] mac80211: fix enabling 4-address mode on a sta vif after assoc Date: Mon, 2 Aug 2021 15:44:39 +0200 Message-Id: <20210802134345.409860407@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210802134344.028226640@linuxfoundation.org> References: <20210802134344.028226640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Felix Fietkau [ Upstream commit a5d3cbdb09ff1f52cbe040932e06c8b9915c6dad ] Notify the driver about the 4-address mode change and also send a nulldata packet to the AP to notify it about the change Fixes: 1ff4e8f2dec8 ("mac80211: notify the driver when a sta uses 4-address mode") Signed-off-by: Felix Fietkau Link: https://lore.kernel.org/r/20210702050111.47546-1-nbd@nbd.name Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/mac80211/cfg.c | 19 +++++++++++++++++++ net/mac80211/ieee80211_i.h | 2 ++ net/mac80211/mlme.c | 4 ++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 7a99892e5aba..9f1443459852 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -152,6 +152,8 @@ static int ieee80211_change_iface(struct wiphy *wiphy, struct vif_params *params) { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + struct ieee80211_local *local = sdata->local; + struct sta_info *sta; int ret; ret = ieee80211_if_change_type(sdata, type); @@ -162,7 +164,24 @@ static int ieee80211_change_iface(struct wiphy *wiphy, RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); ieee80211_check_fast_rx_iface(sdata); } else if (type == NL80211_IFTYPE_STATION && params->use_4addr >= 0) { + struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; + + if (params->use_4addr == ifmgd->use_4addr) + return 0; + sdata->u.mgd.use_4addr = params->use_4addr; + if (!ifmgd->associated) + return 0; + + mutex_lock(&local->sta_mtx); + sta = sta_info_get(sdata, ifmgd->bssid); + if (sta) + drv_sta_set_4addr(local, sdata, &sta->sta, + params->use_4addr); + mutex_unlock(&local->sta_mtx); + + if (params->use_4addr) + ieee80211_send_4addr_nullfunc(local, sdata); } if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 648696b49f89..1e1d2e72de4a 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -2045,6 +2045,8 @@ void ieee80211_dynamic_ps_timer(struct timer_list *t); void ieee80211_send_nullfunc(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata, bool powersave); +void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata); void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata, struct ieee80211_hdr *hdr, bool ack, u16 tx_time); diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index b1c44fa63a06..9bed6464c5bd 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -1115,8 +1115,8 @@ void ieee80211_send_nullfunc(struct ieee80211_local *local, ieee80211_tx_skb(sdata, skb); } -static void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) +void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata) { struct sk_buff *skb; struct ieee80211_hdr *nullfunc; -- 2.30.2