Patch "net: hsr: fix fill_frame_info() regression vs VLAN packets" has been added to the 6.13-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: hsr: fix fill_frame_info() regression vs VLAN packets

to the 6.13-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-hsr-fix-fill_frame_info-regression-vs-vlan-packe.patch
and it can be found in the queue-6.13 subdirectory.

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



commit 2251bde5e8a2e626e30b127bc928d2518b273f18
Author: Eric Dumazet <edumazet@xxxxxxxxxx>
Date:   Wed Jan 29 13:00:07 2025 +0000

    net: hsr: fix fill_frame_info() regression vs VLAN packets
    
    [ Upstream commit 0f5697f1a3f99bc2b674b8aa3c5da822c5673c11 ]
    
    Stephan Wurm reported that my recent patch broke VLAN support.
    
    Apparently skb->mac_len is not correct for VLAN traffic as
    shown by debug traces [1].
    
    Use instead pskb_may_pull() to make sure the expected header
    is present in skb->head.
    
    Many thanks to Stephan for his help.
    
    [1]
    kernel: skb len=170 headroom=2 headlen=170 tailroom=20
            mac=(2,14) mac_len=14 net=(16,-1) trans=-1
            shinfo(txflags=0 nr_frags=0 gso(size=0 type=0 segs=0))
            csum(0x0 start=0 offset=0 ip_summed=0 complete_sw=0 valid=0 level=0)
            hash(0x0 sw=0 l4=0) proto=0x0000 pkttype=0 iif=0
            priority=0x0 mark=0x0 alloc_cpu=0 vlan_all=0x0
            encapsulation=0 inner(proto=0x0000, mac=0, net=0, trans=0)
    kernel: dev name=prp0 feat=0x0000000000007000
    kernel: sk family=17 type=3 proto=0
    kernel: skb headroom: 00000000: 74 00
    kernel: skb linear:   00000000: 01 0c cd 01 00 01 00 d0 93 53 9c cb 81 00 80 00
    kernel: skb linear:   00000010: 88 b8 00 01 00 98 00 00 00 00 61 81 8d 80 16 52
    kernel: skb linear:   00000020: 45 47 44 4e 43 54 52 4c 2f 4c 4c 4e 30 24 47 4f
    kernel: skb linear:   00000030: 24 47 6f 43 62 81 01 14 82 16 52 45 47 44 4e 43
    kernel: skb linear:   00000040: 54 52 4c 2f 4c 4c 4e 30 24 44 73 47 6f 6f 73 65
    kernel: skb linear:   00000050: 83 07 47 6f 49 64 65 6e 74 84 08 67 8d f5 93 7e
    kernel: skb linear:   00000060: 76 c8 00 85 01 01 86 01 00 87 01 00 88 01 01 89
    kernel: skb linear:   00000070: 01 00 8a 01 02 ab 33 a2 15 83 01 00 84 03 03 00
    kernel: skb linear:   00000080: 00 91 08 67 8d f5 92 77 4b c6 1f 83 01 00 a2 1a
    kernel: skb linear:   00000090: a2 06 85 01 00 83 01 00 84 03 03 00 00 91 08 67
    kernel: skb linear:   000000a0: 8d f5 92 77 4b c6 1f 83 01 00
    kernel: skb tailroom: 00000000: 80 18 02 00 fe 4e 00 00 01 01 08 0a 4f fd 5e d1
    kernel: skb tailroom: 00000010: 4f fd 5e cd
    
    Fixes: b9653d19e556 ("net: hsr: avoid potential out-of-bound access in fill_frame_info()")
    Reported-by: Stephan Wurm <stephan.wurm@xxxxxxxxxxx>
    Tested-by: Stephan Wurm <stephan.wurm@xxxxxxxxxxx>
    Closes: https://lore.kernel.org/netdev/Z4o_UC0HweBHJ_cw@PC-LX-SteWu/
    Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Link: https://patch.msgid.link/20250129130007.644084-1-edumazet@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
index 87bb3a91598ee..a4bacf1985558 100644
--- a/net/hsr/hsr_forward.c
+++ b/net/hsr/hsr_forward.c
@@ -700,9 +700,12 @@ static int fill_frame_info(struct hsr_frame_info *frame,
 		frame->is_vlan = true;
 
 	if (frame->is_vlan) {
-		if (skb->mac_len < offsetofend(struct hsr_vlan_ethhdr, vlanhdr))
+		/* Note: skb->mac_len might be wrong here. */
+		if (!pskb_may_pull(skb,
+				   skb_mac_offset(skb) +
+				   offsetofend(struct hsr_vlan_ethhdr, vlanhdr)))
 			return -EINVAL;
-		vlan_hdr = (struct hsr_vlan_ethhdr *)ethhdr;
+		vlan_hdr = (struct hsr_vlan_ethhdr *)skb_mac_header(skb);
 		proto = vlan_hdr->vlanhdr.h_vlan_encapsulated_proto;
 	}
 




[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