Patch "skbuff: Account for tail adjustment during pull operations" has been added to the 4.19-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

    skbuff: Account for tail adjustment during pull operations

to the 4.19-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:
     skbuff-account-for-tail-adjustment-during-pull-opera.patch
and it can be found in the queue-4.19 subdirectory.

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



commit dcb40af8e3b1b9d2ba09cc454d423f0ad8849d12
Author: Subash Abhinov Kasiviswanathan <quic_subashab@xxxxxxxxxxx>
Date:   Wed Dec 14 23:11:58 2022 -0700

    skbuff: Account for tail adjustment during pull operations
    
    [ Upstream commit 2d7afdcbc9d32423f177ee12b7c93783aea338fb ]
    
    Extending the tail can have some unexpected side effects if a program uses
    a helper like BPF_FUNC_skb_pull_data to read partial content beyond the
    head skb headlen when all the skbs in the gso frag_list are linear with no
    head_frag -
    
      kernel BUG at net/core/skbuff.c:4219!
      pc : skb_segment+0xcf4/0xd2c
      lr : skb_segment+0x63c/0xd2c
      Call trace:
       skb_segment+0xcf4/0xd2c
       __udp_gso_segment+0xa4/0x544
       udp4_ufo_fragment+0x184/0x1c0
       inet_gso_segment+0x16c/0x3a4
       skb_mac_gso_segment+0xd4/0x1b0
       __skb_gso_segment+0xcc/0x12c
       udp_rcv_segment+0x54/0x16c
       udp_queue_rcv_skb+0x78/0x144
       udp_unicast_rcv_skb+0x8c/0xa4
       __udp4_lib_rcv+0x490/0x68c
       udp_rcv+0x20/0x30
       ip_protocol_deliver_rcu+0x1b0/0x33c
       ip_local_deliver+0xd8/0x1f0
       ip_rcv+0x98/0x1a4
       deliver_ptype_list_skb+0x98/0x1ec
       __netif_receive_skb_core+0x978/0xc60
    
    Fix this by marking these skbs as GSO_DODGY so segmentation can handle
    the tail updates accordingly.
    
    Fixes: 3dcbdb134f32 ("net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list")
    Signed-off-by: Sean Tranchetti <quic_stranche@xxxxxxxxxxx>
    Signed-off-by: Subash Abhinov Kasiviswanathan <quic_subashab@xxxxxxxxxxx>
    Reviewed-by: Alexander Duyck <alexanderduyck@xxxxxx>
    Link: https://lore.kernel.org/r/1671084718-24796-1-git-send-email-quic_subashab@xxxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 4178fc28c277..7f501dff4501 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -1953,6 +1953,9 @@ void *__pskb_pull_tail(struct sk_buff *skb, int delta)
 				insp = list;
 			} else {
 				/* Eaten partially. */
+				if (skb_is_gso(skb) && !list->head_frag &&
+				    skb_headlen(list))
+					skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
 
 				if (skb_shared(list)) {
 					/* Sucks! We need to fork list. :-( */



[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