Patch "net: fix memory leak in tcp_conn_request()" has been added to the 6.12-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: fix memory leak in tcp_conn_request()

to the 6.12-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-fix-memory-leak-in-tcp_conn_request.patch
and it can be found in the queue-6.12 subdirectory.

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



commit 22c3f0c77fd5691a30ae2a15166d2d39ea67464d
Author: Wang Liang <wangliang74@xxxxxxxxxx>
Date:   Thu Dec 19 15:28:59 2024 +0800

    net: fix memory leak in tcp_conn_request()
    
    [ Upstream commit 4f4aa4aa28142d53f8b06585c478476cfe325cfc ]
    
    If inet_csk_reqsk_queue_hash_add() return false, tcp_conn_request() will
    return without free the dst memory, which allocated in af_ops->route_req.
    
    Here is the kmemleak stack:
    
    unreferenced object 0xffff8881198631c0 (size 240):
      comm "softirq", pid 0, jiffies 4299266571 (age 1802.392s)
      hex dump (first 32 bytes):
        00 10 9b 03 81 88 ff ff 80 98 da bc ff ff ff ff  ................
        81 55 18 bb ff ff ff ff 00 00 00 00 00 00 00 00  .U..............
      backtrace:
        [<ffffffffb93e8d4c>] kmem_cache_alloc+0x60c/0xa80
        [<ffffffffba11b4c5>] dst_alloc+0x55/0x250
        [<ffffffffba227bf6>] rt_dst_alloc+0x46/0x1d0
        [<ffffffffba23050a>] __mkroute_output+0x29a/0xa50
        [<ffffffffba23456b>] ip_route_output_key_hash+0x10b/0x240
        [<ffffffffba2346bd>] ip_route_output_flow+0x1d/0x90
        [<ffffffffba254855>] inet_csk_route_req+0x2c5/0x500
        [<ffffffffba26b331>] tcp_conn_request+0x691/0x12c0
        [<ffffffffba27bd08>] tcp_rcv_state_process+0x3c8/0x11b0
        [<ffffffffba2965c6>] tcp_v4_do_rcv+0x156/0x3b0
        [<ffffffffba299c98>] tcp_v4_rcv+0x1cf8/0x1d80
        [<ffffffffba239656>] ip_protocol_deliver_rcu+0xf6/0x360
        [<ffffffffba2399a6>] ip_local_deliver_finish+0xe6/0x1e0
        [<ffffffffba239b8e>] ip_local_deliver+0xee/0x360
        [<ffffffffba239ead>] ip_rcv+0xad/0x2f0
        [<ffffffffba110943>] __netif_receive_skb_one_core+0x123/0x140
    
    Call dst_release() to free the dst memory when
    inet_csk_reqsk_queue_hash_add() return false in tcp_conn_request().
    
    Fixes: ff46e3b44219 ("Fix race for duplicate reqsk on identical SYN")
    Signed-off-by: Wang Liang <wangliang74@xxxxxxxxxx>
    Link: https://patch.msgid.link/20241219072859.3783576-1-wangliang74@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 2d844e1f867f..2d43b29da15e 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -7328,6 +7328,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
 			if (unlikely(!inet_csk_reqsk_queue_hash_add(sk, req,
 								    req->timeout))) {
 				reqsk_free(req);
+				dst_release(dst);
 				return 0;
 			}
 




[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