Oleksij Rempel
efe7cf8280
can: j1939: Fix UAF in j1939_sk_match_filter during setsockopt(SO_J1939_FILTER)
...
Lock jsk->sk to prevent UAF when setsockopt(..., SO_J1939_FILTER, ...)
modifies jsk->filters while receiving packets.
Following trace was seen on affected system:
==================================================================
BUG: KASAN: slab-use-after-free in j1939_sk_recv_match_one+0x1af/0x2d0 [can_j1939]
Read of size 4 at addr ffff888012144014 by task j1939/350
CPU: 0 PID: 350 Comm: j1939 Tainted: G W OE 6.5.0-rc5 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
Call Trace:
print_report+0xd3/0x620
? kasan_complete_mode_report_info+0x7d/0x200
? j1939_sk_recv_match_one+0x1af/0x2d0 [can_j1939]
kasan_report+0xc2/0x100
? j1939_sk_recv_match_one+0x1af/0x2d0 [can_j1939]
__asan_load4+0x84/0xb0
j1939_sk_recv_match_one+0x1af/0x2d0 [can_j1939]
j1939_sk_recv+0x20b/0x320 [can_j1939]
? __kasan_check_write+0x18/0x20
? __pfx_j1939_sk_recv+0x10/0x10 [can_j1939]
? j1939_simple_recv+0x69/0x280 [can_j1939]
? j1939_ac_recv+0x5e/0x310 [can_j1939]
j1939_can_recv+0x43f/0x580 [can_j1939]
? __pfx_j1939_can_recv+0x10/0x10 [can_j1939]
? raw_rcv+0x42/0x3c0 [can_raw]
? __pfx_j1939_can_recv+0x10/0x10 [can_j1939]
can_rcv_filter+0x11f/0x350 [can]
can_receive+0x12f/0x190 [can]
? __pfx_can_rcv+0x10/0x10 [can]
can_rcv+0xdd/0x130 [can]
? __pfx_can_rcv+0x10/0x10 [can]
__netif_receive_skb_one_core+0x13d/0x150
? __pfx___netif_receive_skb_one_core+0x10/0x10
? __kasan_check_write+0x18/0x20
? _raw_spin_lock_irq+0x8c/0xe0
__netif_receive_skb+0x23/0xb0
process_backlog+0x107/0x260
__napi_poll+0x69/0x310
net_rx_action+0x2a1/0x580
? __pfx_net_rx_action+0x10/0x10
? __pfx__raw_spin_lock+0x10/0x10
? handle_irq_event+0x7d/0xa0
__do_softirq+0xf3/0x3f8
do_softirq+0x53/0x80
</IRQ>
<TASK>
__local_bh_enable_ip+0x6e/0x70
netif_rx+0x16b/0x180
can_send+0x32b/0x520 [can]
? __pfx_can_send+0x10/0x10 [can]
? __check_object_size+0x299/0x410
raw_sendmsg+0x572/0x6d0 [can_raw]
? __pfx_raw_sendmsg+0x10/0x10 [can_raw]
? apparmor_socket_sendmsg+0x2f/0x40
? __pfx_raw_sendmsg+0x10/0x10 [can_raw]
sock_sendmsg+0xef/0x100
sock_write_iter+0x162/0x220
? __pfx_sock_write_iter+0x10/0x10
? __rtnl_unlock+0x47/0x80
? security_file_permission+0x54/0x320
vfs_write+0x6ba/0x750
? __pfx_vfs_write+0x10/0x10
? __fget_light+0x1ca/0x1f0
? __rcu_read_unlock+0x5b/0x280
ksys_write+0x143/0x170
? __pfx_ksys_write+0x10/0x10
? __kasan_check_read+0x15/0x20
? fpregs_assert_state_consistent+0x62/0x70
__x64_sys_write+0x47/0x60
do_syscall_64+0x60/0x90
? do_syscall_64+0x6d/0x90
? irqentry_exit+0x3f/0x50
? exc_page_fault+0x79/0xf0
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Allocated by task 348:
kasan_save_stack+0x2a/0x50
kasan_set_track+0x29/0x40
kasan_save_alloc_info+0x1f/0x30
__kasan_kmalloc+0xb5/0xc0
__kmalloc_node_track_caller+0x67/0x160
j1939_sk_setsockopt+0x284/0x450 [can_j1939]
__sys_setsockopt+0x15c/0x2f0
__x64_sys_setsockopt+0x6b/0x80
do_syscall_64+0x60/0x90
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Freed by task 349:
kasan_save_stack+0x2a/0x50
kasan_set_track+0x29/0x40
kasan_save_free_info+0x2f/0x50
__kasan_slab_free+0x12e/0x1c0
__kmem_cache_free+0x1b9/0x380
kfree+0x7a/0x120
j1939_sk_setsockopt+0x3b2/0x450 [can_j1939]
__sys_setsockopt+0x15c/0x2f0
__x64_sys_setsockopt+0x6b/0x80
do_syscall_64+0x60/0x90
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Fixes: 9d71dd0c70099 ("can: add support of SAE J1939 protocol")
Reported-by: Sili Luo <rootlab@huawei.com>
Suggested-by: Sili Luo <rootlab@huawei.com>
Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
Cc: stable@vger.kernel.org
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/all/20231020133814.383996-1-o.rempel@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2024-02-14 13:53:03 +01:00
..
2024-02-09 14:12:01 -08:00
2023-12-13 05:44:30 +09:00
2023-10-28 11:29:28 +01:00
2024-01-19 21:25:06 -08:00
2023-12-26 20:31:01 +00:00
2024-02-09 14:12:01 -08:00
2023-10-01 19:09:54 +01:00
2024-01-27 09:13:39 +01:00
2024-01-18 11:37:24 -08:00
2023-12-15 16:25:55 -08:00
2024-01-30 18:06:56 -08:00
2024-01-05 08:06:35 -08:00
2024-02-14 13:53:03 +01:00
2024-01-15 15:40:50 +01:00
2024-02-12 17:38:52 -08:00
2023-08-01 21:07:46 -07:00
2023-12-26 20:31:01 +00:00
2024-02-06 18:45:16 -08:00
2024-01-11 10:07:29 -08:00
2024-01-11 16:33:52 -08:00
2024-01-18 13:21:06 +01:00
2024-02-08 18:32:29 -08:00
2024-01-29 11:29:55 +00:00
2023-12-15 11:14:57 +01:00
2023-12-15 10:50:18 +00:00
2024-02-12 09:51:26 +00:00
2024-02-09 14:12:01 -08:00
2023-12-29 07:46:38 +00:00
2024-01-03 18:37:22 -08:00
2024-02-09 14:12:01 -08:00
2023-12-11 10:59:17 +00:00
2024-01-30 13:49:09 +01:00
2024-02-02 13:11:59 +01:00
2023-12-15 11:14:57 +01:00
2023-10-10 19:43:22 -07:00
2023-08-15 15:26:18 -07:00
2024-02-12 10:08:13 +00:00
2023-11-18 15:00:51 +00:00
2024-02-08 12:24:02 +01:00
2023-12-07 14:23:12 -05:00
2024-01-23 11:21:18 +01:00
2023-10-01 19:09:54 +01:00
2024-01-29 12:05:31 +00:00
2023-06-10 00:11:41 -07:00
2024-02-09 12:54:38 -08:00
2024-01-05 08:06:35 -08:00
2023-06-24 15:50:13 -07:00
2023-12-29 08:43:59 +00:00
2024-01-01 18:41:29 +00:00
2024-02-13 10:25:30 +01:00
2023-12-21 22:17:23 +01:00
2023-12-15 11:59:53 +00:00
2024-02-05 12:34:07 +00:00
2024-02-09 14:12:02 -08:00
2024-01-04 10:29:18 +00:00
2024-01-26 14:06:05 -08:00
2024-01-29 13:39:48 -05:00
2023-07-21 08:54:03 +01:00
2024-02-06 08:49:26 +01:00
2024-02-10 21:38:19 +00:00
2024-02-13 11:33:04 +01:00
2024-01-03 18:37:16 -08:00
2024-02-02 13:08:58 +01:00
2023-12-26 20:31:01 +00:00
2024-01-24 16:24:06 -08:00
2024-02-09 14:12:01 -08:00
2023-12-12 14:24:14 +01:00
2024-01-04 10:23:10 -08:00
2024-01-04 10:23:10 -08:00
2024-01-08 11:43:04 -08:00
2023-08-15 15:26:17 -07:00