Paolo Abeni
50b9420444
ipmr: tune the ipmr_can_free_table() checks.
Eric reported a syzkaller-triggered splat caused by recent ipmr changes:
WARNING: CPU: 2 PID: 6041 at net/ipv6/ip6mr.c:419
ip6mr_free_table+0xbd/0x120 net/ipv6/ip6mr.c:419
Modules linked in:
CPU: 2 UID: 0 PID: 6041 Comm: syz-executor183 Not tainted
6.12.0-syzkaller-10681-g65ae975e97d5 #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
RIP: 0010:ip6mr_free_table+0xbd/0x120 net/ipv6/ip6mr.c:419
Code: 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 80 3c
02 00 75 58 49 83 bc 24 c0 0e 00 00 00 74 09 e8 44 ef a9 f7 90 <0f> 0b
90 e8 3b ef a9 f7 48 8d 7b 38 e8 12 a3 96 f7 48 89 df be 0f
RSP: 0018:ffffc90004267bd8 EFLAGS: 00010293
RAX: 0000000000000000 RBX: ffff88803c710000 RCX: ffffffff89e4d844
RDX: ffff88803c52c880 RSI: ffffffff89e4d87c RDI: ffff88803c578ec0
RBP: 0000000000000001 R08: 0000000000000005 R09: 0000000000000000
R10: 0000000000000001 R11: 0000000000000001 R12: ffff88803c578000
R13: ffff88803c710000 R14: ffff88803c710008 R15: dead000000000100
FS: 00007f7a855ee6c0(0000) GS:ffff88806a800000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f7a85689938 CR3: 000000003c492000 CR4: 0000000000352ef0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
ip6mr_rules_exit+0x176/0x2d0 net/ipv6/ip6mr.c:283
ip6mr_net_exit_batch+0x53/0xa0 net/ipv6/ip6mr.c:1388
ops_exit_list+0x128/0x180 net/core/net_namespace.c:177
setup_net+0x4fe/0x860 net/core/net_namespace.c:394
copy_net_ns+0x2b4/0x6b0 net/core/net_namespace.c:500
create_new_namespaces+0x3ea/0xad0 kernel/nsproxy.c:110
unshare_nsproxy_namespaces+0xc0/0x1f0 kernel/nsproxy.c:228
ksys_unshare+0x45d/0xa40 kernel/fork.c:3334
__do_sys_unshare kernel/fork.c:3405 [inline]
__se_sys_unshare kernel/fork.c:3403 [inline]
__x64_sys_unshare+0x31/0x40 kernel/fork.c:3403
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f7a856332d9
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 51 18 00 00 90 48 89 f8 48
89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d
01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f7a855ee238 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
RAX: ffffffffffffffda RBX: 00007f7a856bd308 RCX: 00007f7a856332d9
RDX: 00007f7a8560f8c6 RSI: 0000000000000000 RDI: 0000000062040200
RBP: 00007f7a856bd300 R08: 00007fff932160a7 R09: 00007f7a855ee6c0
R10: 0000000000000000 R11: 0000000000000246 R12: 00007f7a856bd30c
R13: 0000000000000000 R14: 00007fff93215fc0 R15: 00007fff932160a8
</TASK>
The root cause is a network namespace creation failing after successful
initialization of the ipmr subsystem. Such a case is not currently
matched by the ipmr_can_free_table() helper.
New namespaces are zeroed on allocation and inserted into net ns list
only after successful creation; when deleting an ipmr table, the list
next pointer can be NULL only on netns initialization failure.
Update the ipmr_can_free_table() checks leveraging such condition.
Reported-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot+6e8cb445d4b43d006e0c@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=6e8cb445d4b43d006e0c
Fixes: 11b6e701bc ("ipmr: add debug check for mr table cleanup")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/8bde975e21bbca9d9c27e36209b2dd4f1d7a3f00.1733212078.git.pabeni@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-12-04 18:49:16 -08:00
..
2024-05-01 18:07:37 +01:00
2024-11-14 15:41:31 -05:00
2024-10-08 15:33:49 -07:00
2024-08-26 09:37:22 -07:00
2024-09-09 13:15:37 -07:00
2024-10-09 13:42:04 +01:00
2024-11-14 13:05:49 +01:00
2024-10-29 11:56:18 +01:00
2024-11-07 10:21:58 +01:00
2024-09-11 20:44:31 -07:00
2024-10-24 16:03:40 +02:00
2024-08-26 09:37:23 -07:00
2024-01-02 12:41:16 +00:00
2020-02-28 14:51:30 +01:00
2024-10-23 11:43:47 +02:00
2024-08-26 09:37:23 -07:00
2019-05-30 11:26:41 -07:00
2023-12-24 15:22:50 +00:00
2024-06-25 11:10:18 +02:00
2024-08-15 17:18:52 -07:00
2022-07-22 12:53:22 +01:00
2023-03-21 21:32:18 -07:00
2024-05-14 10:53:19 -07:00
2022-08-09 22:14:02 -07:00
2021-12-13 12:34:09 +00:00
2024-08-26 09:37:22 -07:00
2024-08-26 09:37:22 -07:00
2024-11-14 11:16:28 +01:00
2024-08-27 13:11:37 -07:00
2021-03-26 17:43:55 +01:00
2024-11-11 18:45:06 -08:00
2024-10-02 17:23:23 -04:00
2022-11-16 11:31:47 +02:00
2024-10-31 18:10:07 -07:00
2024-03-06 21:01:26 +01:00
2024-10-30 15:29:59 +01:00
2024-10-02 17:23:23 -04:00
2020-03-27 19:40:38 -07:00
2021-12-22 15:03:47 -08:00
2022-07-22 12:53:22 +01:00
2023-07-14 20:39:29 -07:00
2022-07-24 18:39:17 -06:00
2023-07-27 17:17:32 -07:00
2022-07-22 12:53:22 +01:00
2023-01-20 09:33:22 +00:00
2024-10-29 16:52:57 -07:00
2024-11-12 11:24:51 +01:00
2023-08-14 08:01:06 +01:00
2023-10-24 13:08:14 -07:00
2024-10-07 16:23:10 -07:00
2024-05-08 10:35:09 +01:00
2019-12-16 16:09:44 -08:00
2024-08-26 09:37:23 -07:00
2024-08-20 15:22:17 -07:00
2024-05-29 17:34:49 -07:00
2024-08-26 09:37:23 -07:00
2024-11-13 18:49:50 -08:00
2024-08-26 09:37:23 -07:00
2022-07-22 12:53:22 +01:00
2024-04-01 21:27:08 -07:00
2022-07-22 12:53:22 +01:00
2021-12-06 16:06:02 -08:00
2024-10-11 15:35:05 -07:00
2024-10-11 15:35:05 -07:00
2022-07-28 22:21:54 -07:00
2024-07-15 09:14:39 -07:00
2024-10-30 17:33:53 -07:00
2023-11-02 09:31:02 +01:00
2023-04-12 16:40:39 -07:00
2022-12-01 15:09:10 +01:00
2023-08-08 15:58:23 -07:00
2022-07-22 12:53:22 +01:00
2021-10-18 12:54:41 +01:00
2024-10-21 09:14:18 +02:00
2022-10-31 10:43:04 +00:00
2024-04-01 10:49:28 +01:00
2024-05-14 10:49:50 -07:00
2023-06-10 00:11:41 -07:00
2024-05-07 01:35:55 +02:00
2022-07-22 12:53:22 +01:00
2023-07-28 14:07:59 -07:00
2024-04-30 18:46:52 -07:00
2024-08-26 09:37:23 -07:00
2021-06-28 14:29:45 -07:00
2024-05-08 10:35:09 +01:00
2024-10-25 10:44:41 +01:00
2023-11-20 11:43:03 +01:00
2024-02-26 18:40:34 -08:00
2019-04-22 21:50:53 -07:00
2022-07-22 12:53:22 +01:00
2024-08-05 16:27:26 -07:00
2024-05-13 18:19:09 -06:00
2024-10-04 15:34:40 -07:00
2022-02-07 20:12:45 -08:00
2021-10-15 11:33:08 +01:00
2024-05-23 14:14:23 -07:00
2024-08-05 16:22:45 -07:00
2024-10-14 17:39:36 -07:00
2024-11-30 13:00:52 -08:00
2024-02-28 11:19:41 +00:00
2021-11-16 13:16:54 +00:00
2024-10-11 15:35:05 -07:00
2024-07-14 07:34:16 -07:00
2024-04-01 10:49:28 +01:00
2024-11-12 11:24:50 +01:00
2024-10-31 18:10:07 -07:00
2023-04-22 01:39:41 +02:00
2024-10-23 13:17:35 +02:00
2022-09-29 07:18:00 +02:00
2022-07-22 12:53:22 +01:00
2022-10-31 20:14:27 -07:00
2024-08-05 16:27:26 -07:00
2024-08-26 09:37:22 -07:00
2024-10-09 08:53:01 +02:00
2024-08-19 18:36:12 -07:00
2024-10-10 11:57:34 +02:00
2021-03-23 14:14:50 -07:00
2023-08-04 15:33:17 -07:00
2023-08-04 15:33:17 -07:00
2024-07-15 08:51:01 -07:00
2023-07-20 10:46:28 +02:00
2021-10-13 09:40:46 -07:00
2024-08-26 09:37:23 -07:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2024-07-15 08:51:19 -07:00
2021-11-07 19:25:29 +00:00
2023-08-18 16:05:26 +02:00
2024-11-07 14:38:01 +01:00
2024-10-02 17:23:23 -04:00
2024-04-25 08:20:54 -07:00
2024-11-09 09:04:54 -08:00
2024-11-09 09:04:54 -08:00
2020-03-02 11:16:27 -08:00
2021-03-26 15:14:56 -07:00
2022-07-22 12:53:22 +01:00
2020-05-29 21:20:20 -07:00
2024-09-11 15:57:50 -07:00
2022-11-18 12:14:55 +00:00
2022-07-22 12:53:22 +01:00
2024-08-12 17:23:57 -07:00
2024-11-09 13:22:57 -08:00
2024-11-09 13:22:57 -08:00
2024-10-29 16:31:23 -07:00
2024-12-04 18:49:16 -08:00
2024-10-10 08:30:22 -07:00
2021-12-10 06:38:26 -08:00
2024-06-01 15:11:52 -07:00
2024-09-12 21:00:26 -07:00
2022-07-22 12:53:22 +01:00
2023-11-20 10:15:16 -08:00
2024-11-21 08:28:08 -08:00
2024-11-11 10:32:06 -08:00
2024-09-11 20:44:31 -07:00
2019-11-12 08:18:03 -08:00
2022-07-22 12:53:22 +01:00
2024-08-12 17:50:34 -07:00
2024-08-30 22:30:55 +02:00
2023-07-14 20:39:29 -07:00
2023-08-04 15:33:50 -07:00
2024-04-01 10:49:28 +01:00
2023-07-14 20:39:30 -07:00
2023-06-02 09:55:22 +01:00
2024-10-30 17:33:53 -07:00
2024-02-02 10:57:55 -08:00
2022-07-22 12:53:22 +01:00
2024-04-30 18:46:52 -07:00
2024-03-07 21:12:43 -08:00
2024-07-11 18:11:31 -07:00
2022-07-22 12:53:22 +01:00
2023-04-06 12:01:20 -07:00
2023-03-17 08:56:37 +00:00
2024-08-26 09:37:23 -07:00
2024-08-26 09:37:23 -07:00
2024-06-06 15:18:04 +02:00
2022-08-01 11:59:23 -07:00
2024-11-12 11:24:51 +01:00
2023-06-19 11:32:58 -07:00
2024-04-01 11:28:32 +01:00
2023-07-14 20:39:30 -07:00
2024-08-07 10:24:46 +01:00
2024-11-11 17:26:52 -08:00
2024-10-08 15:38:56 -07:00
2024-05-10 18:52:45 -07:00
2022-07-22 12:53:22 +01:00
2024-05-30 18:29:38 -07:00
2024-06-24 16:41:23 -07:00
2024-05-30 18:29:38 -07:00
2021-04-28 14:06:45 -07:00
2024-04-30 13:24:48 +02:00
2019-10-05 16:29:00 -07:00
2024-08-02 17:16:59 -07:00
2024-10-25 09:08:22 +02:00
2023-10-04 11:49:20 -07:00
2022-07-22 12:53:22 +01:00
2022-07-18 11:24:10 +01:00
2024-02-16 09:36:37 +00:00
2024-02-14 10:49:37 +01:00
2024-11-03 12:10:11 -08:00
2023-12-04 14:45:26 -08:00
2024-10-30 13:26:55 +00:00
2024-07-08 14:07:31 -07:00
2024-05-09 20:25:55 -07:00
2023-07-28 14:07:59 -07:00
2019-10-04 14:07:07 -07:00
2024-11-06 11:08:56 -08:00
2023-08-01 15:06:27 -07:00
2022-12-12 15:04:39 -08:00
2022-07-22 12:53:22 +01:00
2024-04-01 10:49:28 +01:00
2024-11-18 11:56:21 +00:00
2023-09-14 16:16:36 +02:00
2019-11-14 18:12:17 -08:00
2023-11-16 22:33:31 +00:00
2024-08-26 09:37:23 -07:00
2022-07-22 12:53:22 +01:00
2024-10-14 17:22:59 +02:00
2024-07-02 15:26:57 +02:00
2023-12-14 16:38:59 +01:00
2024-11-06 12:42:51 +01:00
2024-10-14 17:23:30 +02:00