Patch "net: llc: reset skb->transport_header" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: llc: reset skb->transport_header

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-llc-reset-skb-transport_header.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e61922c0628de15bf158bbab1cbf7b18a4db72ab
Author: Antonio Pastor <antonio.pastor@xxxxxxxxx>
Date:   Tue Dec 24 20:07:20 2024 -0500

    net: llc: reset skb->transport_header
    
    [ Upstream commit a024e377efed31ecfb39210bed562932321345b3 ]
    
    802.2+LLC+SNAP frames received by napi_complete_done with GRO and DSA
    have skb->transport_header set two bytes short, or pointing 2 bytes
    before network_header & skb->data. As snap_rcv expects transport_header
    to point to SNAP header (OID:PID) after LLC processing advances offset
    over LLC header (llc_rcv & llc_fixup_skb), code doesn't find a match
    and packet is dropped.
    
    Between napi_complete_done and snap_rcv, transport_header is not used
    until __netif_receive_skb_core, where originally it was being reset.
    Commit fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
    only does so if not set, on the assumption the value was set correctly
    by GRO (and also on assumption that "network stacks usually reset the
    transport header anyway"). Afterwards it is moved forward by
    llc_fixup_skb.
    
    Locally generated traffic shows up at __netif_receive_skb_core with no
    transport_header set and is processed without issue. On a setup with
    GRO but no DSA, transport_header and network_header are both set to
    point to skb->data which is also correct.
    
    As issue is LLC specific, to avoid impacting non-LLC traffic, and to
    follow up on original assumption made on previous code change,
    llc_fixup_skb to reset the offset after skb pull. llc_fixup_skb
    assumes the LLC header is at skb->data, and by definition SNAP header
    immediately follows.
    
    Fixes: fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
    Signed-off-by: Antonio Pastor <antonio.pastor@xxxxxxxxx>
    Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Link: https://patch.msgid.link/20241225010723.2830290-1-antonio.pastor@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/llc/llc_input.c b/net/llc/llc_input.c
index 51bccfb00a9c..61b0159b2fbe 100644
--- a/net/llc/llc_input.c
+++ b/net/llc/llc_input.c
@@ -124,8 +124,8 @@ static inline int llc_fixup_skb(struct sk_buff *skb)
 	if (unlikely(!pskb_may_pull(skb, llc_len)))
 		return 0;
 
-	skb->transport_header += llc_len;
 	skb_pull(skb, llc_len);
+	skb_reset_transport_header(skb);
 	if (skb->protocol == htons(ETH_P_802_2)) {
 		__be16 pdulen;
 		s32 data_size;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux