Eric Dumazet
03cfda4fa6
tcp: fix another uninit-value (sk_rx_queue_mapping)
KMSAN is still not happy [1].
I missed that passive connections do not inherit their
sk_rx_queue_mapping values from the request socket,
but instead tcp_child_process() is calling
sk_mark_napi_id(child, skb)
We have many sk_mark_napi_id() callers, so I am providing
a new helper, forcing the setting sk_rx_queue_mapping
and sk_napi_id.
Note that we had no KMSAN report for sk_napi_id because
passive connections got a copy of this field from the listener.
sk_rx_queue_mapping in the other hand is inside the
sk_dontcopy_begin/sk_dontcopy_end so sk_clone_lock()
leaves this field uninitialized.
We might remove dead code populating req->sk_rx_queue_mapping
in the future.
[1]
BUG: KMSAN: uninit-value in __sk_rx_queue_set include/net/sock.h:1924 [inline]
BUG: KMSAN: uninit-value in sk_rx_queue_update include/net/sock.h:1938 [inline]
BUG: KMSAN: uninit-value in sk_mark_napi_id include/net/busy_poll.h:136 [inline]
BUG: KMSAN: uninit-value in tcp_child_process+0xb42/0x1050 net/ipv4/tcp_minisocks.c:833
__sk_rx_queue_set include/net/sock.h:1924 [inline]
sk_rx_queue_update include/net/sock.h:1938 [inline]
sk_mark_napi_id include/net/busy_poll.h:136 [inline]
tcp_child_process+0xb42/0x1050 net/ipv4/tcp_minisocks.c:833
tcp_v4_rcv+0x3d83/0x4ed0 net/ipv4/tcp_ipv4.c:2066
ip_protocol_deliver_rcu+0x760/0x10b0 net/ipv4/ip_input.c:204
ip_local_deliver_finish net/ipv4/ip_input.c:231 [inline]
NF_HOOK include/linux/netfilter.h:307 [inline]
ip_local_deliver+0x584/0x8c0 net/ipv4/ip_input.c:252
dst_input include/net/dst.h:460 [inline]
ip_sublist_rcv_finish net/ipv4/ip_input.c:551 [inline]
ip_list_rcv_finish net/ipv4/ip_input.c:601 [inline]
ip_sublist_rcv+0x11fd/0x1520 net/ipv4/ip_input.c:609
ip_list_rcv+0x95f/0x9a0 net/ipv4/ip_input.c:644
__netif_receive_skb_list_ptype net/core/dev.c:5505 [inline]
__netif_receive_skb_list_core+0xe34/0x1240 net/core/dev.c:5553
__netif_receive_skb_list+0x7fc/0x960 net/core/dev.c:5605
netif_receive_skb_list_internal+0x868/0xde0 net/core/dev.c:5696
gro_normal_list net/core/dev.c:5850 [inline]
napi_complete_done+0x579/0xdd0 net/core/dev.c:6587
virtqueue_napi_complete drivers/net/virtio_net.c:339 [inline]
virtnet_poll+0x17b6/0x2350 drivers/net/virtio_net.c:1557
__napi_poll+0x14e/0xbc0 net/core/dev.c:7020
napi_poll net/core/dev.c:7087 [inline]
net_rx_action+0x824/0x1880 net/core/dev.c:7174
__do_softirq+0x1fe/0x7eb kernel/softirq.c:558
run_ksoftirqd+0x33/0x50 kernel/softirq.c:920
smpboot_thread_fn+0x616/0xbf0 kernel/smpboot.c:164
kthread+0x721/0x850 kernel/kthread.c:327
ret_from_fork+0x1f/0x30
Uninit was created at:
__alloc_pages+0xbc7/0x10a0 mm/page_alloc.c:5409
alloc_pages+0x8a5/0xb80
alloc_slab_page mm/slub.c:1810 [inline]
allocate_slab+0x287/0x1c20 mm/slub.c:1947
new_slab mm/slub.c:2010 [inline]
___slab_alloc+0xbdf/0x1e90 mm/slub.c:3039
__slab_alloc mm/slub.c:3126 [inline]
slab_alloc_node mm/slub.c:3217 [inline]
slab_alloc mm/slub.c:3259 [inline]
kmem_cache_alloc+0xbb3/0x11c0 mm/slub.c:3264
sk_prot_alloc+0xeb/0x570 net/core/sock.c:1914
sk_clone_lock+0xd6/0x1940 net/core/sock.c:2118
inet_csk_clone_lock+0x8d/0x6a0 net/ipv4/inet_connection_sock.c:956
tcp_create_openreq_child+0xb1/0x1ef0 net/ipv4/tcp_minisocks.c:453
tcp_v4_syn_recv_sock+0x268/0x2710 net/ipv4/tcp_ipv4.c:1563
tcp_check_req+0x207c/0x2a30 net/ipv4/tcp_minisocks.c:765
tcp_v4_rcv+0x36f5/0x4ed0 net/ipv4/tcp_ipv4.c:2047
ip_protocol_deliver_rcu+0x760/0x10b0 net/ipv4/ip_input.c:204
ip_local_deliver_finish net/ipv4/ip_input.c:231 [inline]
NF_HOOK include/linux/netfilter.h:307 [inline]
ip_local_deliver+0x584/0x8c0 net/ipv4/ip_input.c:252
dst_input include/net/dst.h:460 [inline]
ip_sublist_rcv_finish net/ipv4/ip_input.c:551 [inline]
ip_list_rcv_finish net/ipv4/ip_input.c:601 [inline]
ip_sublist_rcv+0x11fd/0x1520 net/ipv4/ip_input.c:609
ip_list_rcv+0x95f/0x9a0 net/ipv4/ip_input.c:644
__netif_receive_skb_list_ptype net/core/dev.c:5505 [inline]
__netif_receive_skb_list_core+0xe34/0x1240 net/core/dev.c:5553
__netif_receive_skb_list+0x7fc/0x960 net/core/dev.c:5605
netif_receive_skb_list_internal+0x868/0xde0 net/core/dev.c:5696
gro_normal_list net/core/dev.c:5850 [inline]
napi_complete_done+0x579/0xdd0 net/core/dev.c:6587
virtqueue_napi_complete drivers/net/virtio_net.c:339 [inline]
virtnet_poll+0x17b6/0x2350 drivers/net/virtio_net.c:1557
__napi_poll+0x14e/0xbc0 net/core/dev.c:7020
napi_poll net/core/dev.c:7087 [inline]
net_rx_action+0x824/0x1880 net/core/dev.c:7174
__do_softirq+0x1fe/0x7eb kernel/softirq.c:558
Fixes: 342159ee39 ("net: avoid dirtying sk->sk_rx_queue_mapping")
Fixes: a37a0ee4d2 ("net: avoid uninit-value from tcp_conn_request")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Tested-by: Alexander Potapenko <glider@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-12-03 14:15:49 +00:00
..
2021-11-04 21:04:25 +09:00
2021-10-01 15:46:15 -07:00
2021-07-01 13:19:48 -07:00
2021-01-28 20:36:21 -08:00
2021-11-01 09:31:03 +01:00
2021-12-02 11:56:04 +00:00
2021-11-17 20:17:05 -08:00
2019-06-05 17:37:07 +02:00
2021-11-03 11:09:20 +00:00
2021-06-01 16:54:42 -07:00
2020-02-28 14:51:30 +01:00
2021-10-18 12:54:41 +01:00
2021-04-27 14:02:06 -07:00
2019-05-30 11:26:41 -07:00
2021-04-23 10:17:26 +01:00
2021-08-16 18:43:39 -07:00
2021-06-11 13:32:46 -07:00
2021-11-01 13:36:09 +00:00
2019-11-06 16:14:48 -08:00
2021-10-13 09:40:45 -07:00
2021-08-03 13:05:25 +01:00
2020-07-21 18:30:47 -07:00
2021-08-03 11:50:22 +01:00
2020-05-01 12:15:37 -07:00
2021-08-03 11:50:22 +01:00
2021-08-11 14:57:31 -07:00
2021-03-26 17:43:55 +01:00
2021-12-03 14:15:49 +00:00
2019-05-21 11:28:45 +02:00
2019-06-19 17:09:55 +02:00
2021-10-28 10:43:58 -07:00
2020-02-29 14:39:08 +01:00
2021-06-10 11:45:14 -04:00
2020-07-15 07:45:24 -07:00
2020-03-27 19:40:38 -07:00
2021-10-20 15:24:36 -07:00
2021-10-20 15:24:36 -07:00
2021-08-05 11:46:42 +01:00
2021-10-13 09:40:46 -07:00
2019-05-30 11:29:52 -07:00
2019-05-30 11:29:52 -07:00
2021-11-01 13:26:07 +00:00
2021-07-30 15:33:24 +02:00
2019-05-21 11:52:39 +02:00
2019-05-21 11:52:39 +02:00
2021-10-13 09:40:46 -07:00
2021-11-01 13:06:32 +00:00
2019-12-16 16:09:44 -08:00
2021-11-29 19:50:45 -08:00
2021-07-09 13:55:53 -07:00
2020-05-08 21:33:33 -07:00
2021-07-29 12:18:11 +01:00
2020-05-05 13:23:29 -07:00
2020-02-19 13:52:32 +01:00
2020-04-20 07:34:16 +02:00
2019-06-19 17:09:55 +02:00
2019-12-24 22:37:30 -08:00
2021-11-29 14:43:35 +00:00
2021-10-29 14:03:22 +01:00
2021-08-19 18:09:18 -07:00
2021-09-02 11:44:19 +01:00
2021-01-21 13:33:45 +01:00
2021-01-21 13:33:45 +01:00
2019-12-09 10:36:44 -08:00
2021-10-18 12:54:41 +01:00
2021-02-12 16:31:46 -08:00
2021-01-29 20:39:14 -08:00
2021-03-18 19:51:12 -07:00
2020-06-22 21:12:44 -07:00
2019-10-25 16:24:32 -07:00
2021-06-28 14:29:45 -07:00
2021-08-13 09:58:25 +02:00
2019-05-30 11:26:41 -07:00
2021-08-27 17:29:18 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2020-03-30 13:45:04 -07:00
2021-01-27 18:18:15 -08:00
2021-10-15 11:28:34 +01:00
2021-10-15 11:33:08 +01:00
2020-12-12 15:08:54 -08:00
2021-07-23 16:44:57 -07:00
2021-10-25 18:02:12 -07:00
2019-09-27 12:05:02 +02:00
2021-10-04 12:53:35 +01:00
2020-06-20 17:47:53 -07:00
2021-11-22 15:44:49 +00:00
2021-08-05 15:08:47 -07:00
2019-06-18 20:48:45 -04:00
2021-12-02 11:56:04 +00:00
2021-07-27 20:11:44 +01:00
2021-10-07 19:52:58 +02:00
2021-10-25 18:02:14 -07:00
2020-11-19 10:49:50 -08:00
2021-11-22 15:44:49 +00:00
2021-10-25 18:02:13 -07:00
2019-06-19 17:09:55 +02:00
2020-06-20 17:22:22 -07:00
2021-03-23 14:14:50 -07:00
2019-10-08 13:23:05 -07:00
2021-10-13 09:40:46 -07:00
2021-07-27 13:05:56 +01:00
2021-11-07 19:25:29 +00:00
2021-08-30 01:51:36 +02:00
2021-10-22 10:20:56 -07:00
2019-05-30 11:26:41 -07:00
2021-06-24 12:41:12 -07:00
2021-10-29 13:23:51 +01:00
2021-10-29 13:23:51 +01:00
2020-03-02 11:16:27 -08:00
2021-03-26 15:14:56 -07:00
2020-02-28 12:08:37 -08:00
2020-05-29 21:20:20 -07:00
2021-10-28 10:43:58 -07:00
2019-12-09 10:36:44 -08:00
2021-10-13 09:40:46 -07:00
2021-10-26 13:44:18 +01:00
2021-08-01 12:00:51 +02:00
2019-05-21 11:28:45 +02:00
2021-07-27 11:43:50 +01:00
2019-11-12 08:18:03 -08:00
2021-09-24 14:07:10 +01:00
2021-11-16 18:02:46 +01:00
2021-11-18 11:29:40 +00:00
2020-03-04 13:25:55 -08:00
2019-05-30 11:26:32 -07:00
2021-10-19 12:24:51 +01:00
2021-09-26 11:09:07 +01:00
2021-05-17 15:29:35 -07:00
2021-08-09 15:34:21 -07:00
2019-05-30 11:26:32 -07:00
2021-03-25 17:40:43 -07:00
2020-07-31 09:24:23 +02:00
2020-08-24 14:35:00 -07:00
2021-10-13 09:40:45 -07:00
2020-11-23 18:36:21 -05:00
2020-06-23 20:27:09 -07:00
2021-08-04 10:01:26 +01:00
2021-10-27 17:09:26 -07:00
2020-07-13 11:03:44 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2020-06-04 15:39:32 -07:00
2021-04-28 14:06:45 -07:00
2020-09-28 15:19:03 -07:00
2019-10-05 16:29:00 -07:00
2021-06-15 18:01:05 +02:00
2021-12-01 19:15:54 -08:00
2021-08-03 13:05:26 +01:00
2021-11-09 01:05:34 +01:00
2021-10-27 14:54:02 +01:00
2019-05-30 11:26:32 -07:00
2021-11-03 11:19:49 +00:00
2019-05-30 11:26:32 -07:00
2019-10-04 14:07:07 -07:00
2021-10-28 10:43:58 -07:00
2020-06-23 20:10:15 -07:00
2020-06-18 20:46:23 -07:00
2021-02-04 18:37:14 -08:00
2021-10-26 13:09:22 +01:00
2019-11-14 18:12:17 -08:00
2020-09-14 16:49:39 -07:00
2019-12-09 10:28:43 -08:00
2019-11-16 12:39:10 -08:00
2021-09-28 00:18:34 +02:00
2021-06-24 19:41:15 +02:00
2021-09-30 23:23:49 +02:00
2021-07-21 09:49:19 +02:00
2021-09-28 00:18:35 +02:00