In the Linux kernel, the following vulnerability has been resolved:
net: fix memory leak in tcp_conn_request()
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:
[] kmem_cache_alloc+0x60c/0xa80
[] dst_alloc+0x55/0x250
[] rt_dst_alloc+0x46/0x1d0
[] __mkroute_output+0x29a/0xa50
[] ip_route_output_key_hash+0x10b/0x240
[] ip_route_output_flow+0x1d/0x90
[] inet_csk_route_req+0x2c5/0x500
[] tcp_conn_request+0x691/0x12c0
[] tcp_rcv_state_process+0x3c8/0x11b0
[] tcp_v4_do_rcv+0x156/0x3b0
[] tcp_v4_rcv+0x1cf8/0x1d80
[] ip_protocol_deliver_rcu+0xf6/0x360
[] ip_local_deliver_finish+0xe6/0x1e0
[] ip_local_deliver+0xee/0x360
[] ip_rcv+0xad/0x2f0
[] __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().
References
In the Linux kernel, the following vulnerability has been resolved:
net: fix memory leak in tcp_conn_request()
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:
[] kmem_cache_alloc+0x60c/0xa80
[] dst_alloc+0x55/0x250
[] rt_dst_alloc+0x46/0x1d0
[] __mkroute_output+0x29a/0xa50
[] ip_route_output_key_hash+0x10b/0x240
[] ip_route_output_flow+0x1d/0x90
[] inet_csk_route_req+0x2c5/0x500
[] tcp_conn_request+0x691/0x12c0
[] tcp_rcv_state_process+0x3c8/0x11b0
[] tcp_v4_do_rcv+0x156/0x3b0
[] tcp_v4_rcv+0x1cf8/0x1d80
[] ip_protocol_deliver_rcu+0xf6/0x360
[] ip_local_deliver_finish+0xe6/0x1e0
[] ip_local_deliver+0xee/0x360
[] ip_rcv+0xad/0x2f0
[] __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().
References