From: Sasha Levin Date: Mon, 30 Mar 2020 16:24:30 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v5.6.1~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b0a77f89f91a083ff0f9d7563702112aefc47658;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/mac80211-add-option-for-setting-control-flags.patch b/queue-4.19/mac80211-add-option-for-setting-control-flags.patch new file mode 100644 index 00000000000..23e46a5052a --- /dev/null +++ b/queue-4.19/mac80211-add-option-for-setting-control-flags.patch @@ -0,0 +1,131 @@ +From 2629a0390c8b1341f38379329e6b9f734ce94803 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 11 Apr 2019 13:47:25 -0700 +Subject: mac80211: add option for setting control flags + +From: Rajkumar Manoharan + +[ Upstream commit 060167729a78d626abaee1a0ebb64b252374426e ] + +Allows setting of control flags of skb cb - if needed - +when calling ieee80211_subif_start_xmit(). + +Tested-by: Pradeep Kumar Chitrapu +Signed-off-by: Rajkumar Manoharan +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + net/mac80211/ieee80211_i.h | 3 ++- + net/mac80211/tdls.c | 2 +- + net/mac80211/tx.c | 18 +++++++++++------- + 3 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h +index cfd30671ccdf9..a879d8071712b 100644 +--- a/net/mac80211/ieee80211_i.h ++++ b/net/mac80211/ieee80211_i.h +@@ -1729,7 +1729,8 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, + struct net_device *dev); + void __ieee80211_subif_start_xmit(struct sk_buff *skb, + struct net_device *dev, +- u32 info_flags); ++ u32 info_flags, ++ u32 ctrl_flags); + void ieee80211_purge_tx_queue(struct ieee80211_hw *hw, + struct sk_buff_head *skbs); + struct sk_buff * +diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c +index 67745d1d4c5d1..aa6fabfed3a70 100644 +--- a/net/mac80211/tdls.c ++++ b/net/mac80211/tdls.c +@@ -1055,7 +1055,7 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev, + + /* disable bottom halves when entering the Tx path */ + local_bh_disable(); +- __ieee80211_subif_start_xmit(skb, dev, flags); ++ __ieee80211_subif_start_xmit(skb, dev, flags, 0); + local_bh_enable(); + + return ret; +diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c +index cb84f2b411ae7..71159ee098ff6 100644 +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -2399,6 +2399,7 @@ static int ieee80211_lookup_ra_sta(struct ieee80211_sub_if_data *sdata, + * @sdata: virtual interface to build the header for + * @skb: the skb to build the header in + * @info_flags: skb flags to set ++ * @ctrl_flags: info control flags to set + * + * This function takes the skb with 802.3 header and reformats the header to + * the appropriate IEEE 802.11 header based on which interface the packet is +@@ -2414,7 +2415,7 @@ static int ieee80211_lookup_ra_sta(struct ieee80211_sub_if_data *sdata, + */ + static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, + struct sk_buff *skb, u32 info_flags, +- struct sta_info *sta) ++ struct sta_info *sta, u32 ctrl_flags) + { + struct ieee80211_local *local = sdata->local; + struct ieee80211_tx_info *info; +@@ -2786,6 +2787,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, + info->flags = info_flags; + info->ack_frame_id = info_id; + info->band = band; ++ info->control.flags = ctrl_flags; + + return skb; + free: +@@ -3612,7 +3614,8 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue); + + void __ieee80211_subif_start_xmit(struct sk_buff *skb, + struct net_device *dev, +- u32 info_flags) ++ u32 info_flags, ++ u32 ctrl_flags) + { + struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + struct sta_info *sta; +@@ -3683,7 +3686,8 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb, + skb->prev = NULL; + skb->next = NULL; + +- skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); ++ skb = ieee80211_build_hdr(sdata, skb, info_flags, ++ sta, ctrl_flags); + if (IS_ERR(skb)) + goto out; + +@@ -3823,9 +3827,9 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, + __skb_queue_head_init(&queue); + ieee80211_convert_to_unicast(skb, dev, &queue); + while ((skb = __skb_dequeue(&queue))) +- __ieee80211_subif_start_xmit(skb, dev, 0); ++ __ieee80211_subif_start_xmit(skb, dev, 0, 0); + } else { +- __ieee80211_subif_start_xmit(skb, dev, 0); ++ __ieee80211_subif_start_xmit(skb, dev, 0, 0); + } + + return NETDEV_TX_OK; +@@ -3850,7 +3854,7 @@ ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata, + goto out; + } + +- skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); ++ skb = ieee80211_build_hdr(sdata, skb, info_flags, sta, 0); + if (IS_ERR(skb)) + goto out; + +@@ -4887,7 +4891,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, + skb_reset_mac_header(skb); + + local_bh_disable(); +- __ieee80211_subif_start_xmit(skb, skb->dev, flags); ++ __ieee80211_subif_start_xmit(skb, skb->dev, flags, 0); + local_bh_enable(); + + return 0; +-- +2.20.1 + diff --git a/queue-4.19/mac80211-set-ieee80211_tx_ctrl_port_ctrl_proto-for-n.patch b/queue-4.19/mac80211-set-ieee80211_tx_ctrl_port_ctrl_proto-for-n.patch new file mode 100644 index 00000000000..3603bf72fe0 --- /dev/null +++ b/queue-4.19/mac80211-set-ieee80211_tx_ctrl_port_ctrl_proto-for-n.patch @@ -0,0 +1,66 @@ +From ecead51fca58f7fa5149111dfd5693d7d3f31d6a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 26 Mar 2020 15:53:34 +0100 +Subject: mac80211: set IEEE80211_TX_CTRL_PORT_CTRL_PROTO for nl80211 TX + +From: Johannes Berg + +[ Upstream commit b95d2ccd2ccb834394d50347d0e40dc38a954e4a ] + +When a frame is transmitted via the nl80211 TX rather than as a +normal frame, IEEE80211_TX_CTRL_PORT_CTRL_PROTO wasn't set and +this will lead to wrong decisions (rate control etc.) being made +about the frame; fix this. + +Fixes: 911806491425 ("mac80211: Add support for tx_control_port") +Signed-off-by: Johannes Berg +Link: https://lore.kernel.org/r/20200326155333.f183f52b02f0.I4054e2a8c11c2ddcb795a0103c87be3538690243@changeid +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + net/mac80211/tx.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c +index 71159ee098ff6..e2487da4024ba 100644 +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -4,7 +4,7 @@ + * Copyright 2006-2007 Jiri Benc + * Copyright 2007 Johannes Berg + * Copyright 2013-2014 Intel Mobile Communications GmbH +- * Copyright (C) 2018 Intel Corporation ++ * Copyright (C) 2018, 2020 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as +@@ -4857,6 +4857,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, + struct ieee80211_local *local = sdata->local; + struct sk_buff *skb; + struct ethhdr *ehdr; ++ u32 ctrl_flags = 0; + u32 flags; + + /* Only accept CONTROL_PORT_PROTOCOL configured in CONNECT/ASSOCIATE +@@ -4866,6 +4867,9 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, + proto != cpu_to_be16(ETH_P_PREAUTH)) + return -EINVAL; + ++ if (proto == sdata->control_port_protocol) ++ ctrl_flags |= IEEE80211_TX_CTRL_PORT_CTRL_PROTO; ++ + if (unencrypted) + flags = IEEE80211_TX_INTFL_DONT_ENCRYPT; + else +@@ -4891,7 +4895,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, + skb_reset_mac_header(skb); + + local_bh_disable(); +- __ieee80211_subif_start_xmit(skb, skb->dev, flags, 0); ++ __ieee80211_subif_start_xmit(skb, skb->dev, flags, ctrl_flags); + local_bh_enable(); + + return 0; +-- +2.20.1 + diff --git a/queue-4.19/series b/queue-4.19/series index 6830cabba62..bfda2231554 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -76,3 +76,5 @@ bpf-btf-fix-btf-verification-of-enum-members-in-struct-union.patch arm-dts-sun8i-a83t-tbs-a711-fix-usb-otg-mode-detection.patch vti6-fix-memory-leak-of-skb-if-input-policy-check-fails.patch revert-r8169-check-that-realtek-phy-driver-module-is-loaded.patch +mac80211-add-option-for-setting-control-flags.patch +mac80211-set-ieee80211_tx_ctrl_port_ctrl_proto-for-n.patch