FAILED: patch "[PATCH] ath11k: Drop multicast fragments" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 210f563b097997ce917e82feab356b298bfd12b0 Mon Sep 17 00:00:00 2001
From: Sriram R <[email protected]>
Date: Tue, 11 May 2021 20:02:59 +0200
Subject: [PATCH] ath11k: Drop multicast fragments
Fragmentation is used only with unicast frames. Drop multicast fragments to avoid any undesired behavior.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1 v2
Signed-off-by Sriram R <[email protected]>
Signed-off-by Jouni Malinen <[email protected]>
Link https://lore.kernel.org/r/20210511200110.1d53bfd20a8b.Ibb63283051bb5e2c45951932c6e1f351d5a73dc3@changeid open here
Signed-off-by Johannes Berg <[email protected]>
drivers/net/wireless/ath/ath11k/dp_rx.c +16 -0
@@ -260,6 +260,16 @@ static void ath11k_dp_rxdesc_set_msdu_len(struct ath11k_base *ab, ab->hw_params.hw_ops->rx_desc_set_msdu_len (desc, len); } +static bool ath11k_dp_rx_h_attn_is_mcbc (struct ath11k_base *ab, +struct hal_rx_desc *desc) +{ +struct rx_attention *attn =ath11k_dp_rx_get_attention (ab, desc); + +return ath11k_dp_rx_h_msdu_end_first_msdu (ab, desc) && + (!!FIELD_GET (RX_ATTENTION_INFO1_MCAST_BCAST , +__le32_to_cpu (attn->info1))); +} +static void ath11k_dp_service_mon_ring (struct timer_list *t) {struct ath11k_base *ab =from_timer (ab, t, mon_reap_timer);
@@ -3468,6 +3478,7 @@ static int ath11k_dp_rx_frag_h_mpdu(struct ath11k *ar,u8 tid;int ret =0 ;bool more_frags; +bool is_mcbc; rx_desc = (struct hal_rx_desc *)msdu->data; peer_id =ath11k_dp_rx_h_mpdu_start_peer_id (ar->ab, rx_desc);
@@ -3475,6 +3486,11 @@ static int ath11k_dp_rx_frag_h_mpdu(struct ath11k *ar, seqno =ath11k_dp_rx_h_mpdu_start_seq_no (ar->ab, rx_desc); frag_no =ath11k_dp_rx_h_mpdu_start_frag_no (ar->ab, msdu); more_frags =ath11k_dp_rx_h_mpdu_start_more_frags (ar->ab, msdu); + is_mcbc =ath11k_dp_rx_h_attn_is_mcbc (ar->ab, rx_desc); + +/* Multicast/Broadcast fragments are not expected */ +if (is_mcbc) +return -EINVAL ; if (!ath11k_dp_rx_h_mpdu_start_seq_ctrl_valid(ar->ab, rx_desc) || !ath11k_dp_rx_h_mpdu_start_fc_valid(ar->ab, rx_desc) ||