Patch "net: ipv6: fix skb hash for some RST packets" has been added to the 6.2-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: ipv6: fix skb hash for some RST packets

to the 6.2-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-ipv6-fix-skb-hash-for-some-rst-packets.patch
and it can be found in the queue-6.2 subdirectory.

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



commit 30b433c4c059c4c4315ef686ee5141cf579b2dae
Author: Antoine Tenart <atenart@xxxxxxxxxx>
Date:   Thu Apr 27 11:21:59 2023 +0200

    net: ipv6: fix skb hash for some RST packets
    
    [ Upstream commit dc6456e938e938d64ffb6383a286b2ac9790a37f ]
    
    The skb hash comes from sk->sk_txhash when using TCP, except for some
    IPv6 RST packets. This is because in tcp_v6_send_reset when not in
    TIME_WAIT the hash is taken from sk->sk_hash, while it should come from
    sk->sk_txhash as those two hashes are not computed the same way.
    
    Packetdrill script to test the above,
    
       0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
      +0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
      +0 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
    
      +0 > (flowlabel 0x1) S 0:0(0) <...>
    
      // Wrong ack seq, trigger a rst.
      +0 < S. 0:0(0) ack 0 win 4000
    
      // Check the flowlabel matches prior one from SYN.
      +0 > (flowlabel 0x1) R 0:0(0) <...>
    
    Fixes: 9258b8b1be2e ("ipv6: tcp: send consistent autoflowlabel in RST packets")
    Signed-off-by: Antoine Tenart <atenart@xxxxxxxxxx>
    Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index e4da7267ed4bd..e0706c33e5472 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1064,7 +1064,7 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb)
 			if (np->repflow)
 				label = ip6_flowlabel(ipv6h);
 			priority = sk->sk_priority;
-			txhash = sk->sk_hash;
+			txhash = sk->sk_txhash;
 		}
 		if (sk->sk_state == TCP_TIME_WAIT) {
 			label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel);



[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