CVE-2024-56658
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
27/12/2024
Last modified:
02/05/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: defer final &#39;struct net&#39; free in netns dismantle<br />
<br />
Ilya reported a slab-use-after-free in dst_destroy [1]<br />
<br />
Issue is in xfrm6_net_init() and xfrm4_net_init() :<br />
<br />
They copy xfrm[46]_dst_ops_template into net->xfrm.xfrm[46]_dst_ops.<br />
<br />
But net structure might be freed before all the dst callbacks are<br />
called. So when dst_destroy() calls later :<br />
<br />
if (dst->ops->destroy)<br />
dst->ops->destroy(dst);<br />
<br />
dst->ops points to the old net->xfrm.xfrm[46]_dst_ops, which has been freed.<br />
<br />
See a relevant issue fixed in :<br />
<br />
ac888d58869b ("net: do not delay dst_entries_add() in dst_release()")<br />
<br />
A fix is to queue the &#39;struct net&#39; to be freed after one<br />
another cleanup_net() round (and existing rcu_barrier())<br />
<br />
[1]<br />
<br />
BUG: KASAN: slab-use-after-free in dst_destroy (net/core/dst.c:112)<br />
Read of size 8 at addr ffff8882137ccab0 by task swapper/37/0<br />
Dec 03 05:46:18 kernel:<br />
CPU: 37 UID: 0 PID: 0 Comm: swapper/37 Kdump: loaded Not tainted 6.12.0 #67<br />
Hardware name: Red Hat KVM/RHEL, BIOS 1.16.1-1.el9 04/01/2014<br />
Call Trace:<br />
<br />
dump_stack_lvl (lib/dump_stack.c:124)<br />
print_address_description.constprop.0 (mm/kasan/report.c:378)<br />
? dst_destroy (net/core/dst.c:112)<br />
print_report (mm/kasan/report.c:489)<br />
? dst_destroy (net/core/dst.c:112)<br />
? kasan_addr_to_slab (mm/kasan/common.c:37)<br />
kasan_report (mm/kasan/report.c:603)<br />
? dst_destroy (net/core/dst.c:112)<br />
? rcu_do_batch (kernel/rcu/tree.c:2567)<br />
dst_destroy (net/core/dst.c:112)<br />
rcu_do_batch (kernel/rcu/tree.c:2567)<br />
? __pfx_rcu_do_batch (kernel/rcu/tree.c:2491)<br />
? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4339 kernel/locking/lockdep.c:4406)<br />
rcu_core (kernel/rcu/tree.c:2825)<br />
handle_softirqs (kernel/softirq.c:554)<br />
__irq_exit_rcu (kernel/softirq.c:589 kernel/softirq.c:428 kernel/softirq.c:637)<br />
irq_exit_rcu (kernel/softirq.c:651)<br />
sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1049 arch/x86/kernel/apic/apic.c:1049)<br />
<br />
<br />
asm_sysvec_apic_timer_interrupt (./arch/x86/include/asm/idtentry.h:702)<br />
RIP: 0010:default_idle (./arch/x86/include/asm/irqflags.h:37 ./arch/x86/include/asm/irqflags.h:92 arch/x86/kernel/process.c:743)<br />
Code: 00 4d 29 c8 4c 01 c7 4c 29 c2 e9 6e ff ff ff 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 66 90 0f 00 2d c7 c9 27 00 fb f4 c3 cc cc cc cc 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 90<br />
RSP: 0018:ffff888100d2fe00 EFLAGS: 00000246<br />
RAX: 00000000001870ed RBX: 1ffff110201a5fc2 RCX: ffffffffb61a3e46<br />
RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffffb3d4d123<br />
RBP: 0000000000000000 R08: 0000000000000001 R09: ffffed11c7e1835d<br />
R10: ffff888e3f0c1aeb R11: 0000000000000000 R12: 0000000000000000<br />
R13: ffff888100d20000 R14: dffffc0000000000 R15: 0000000000000000<br />
? ct_kernel_exit.constprop.0 (kernel/context_tracking.c:148)<br />
? cpuidle_idle_call (kernel/sched/idle.c:186)<br />
default_idle_call (./include/linux/cpuidle.h:143 kernel/sched/idle.c:118)<br />
cpuidle_idle_call (kernel/sched/idle.c:186)<br />
? __pfx_cpuidle_idle_call (kernel/sched/idle.c:168)<br />
? lock_release (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5848)<br />
? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4347 kernel/locking/lockdep.c:4406)<br />
? tsc_verify_tsc_adjust (arch/x86/kernel/tsc_sync.c:59)<br />
do_idle (kernel/sched/idle.c:326)<br />
cpu_startup_entry (kernel/sched/idle.c:423 (discriminator 1))<br />
start_secondary (arch/x86/kernel/smpboot.c:202 arch/x86/kernel/smpboot.c:282)<br />
? __pfx_start_secondary (arch/x86/kernel/smpboot.c:232)<br />
? soft_restart_cpu (arch/x86/kernel/head_64.S:452)<br />
common_startup_64 (arch/x86/kernel/head_64.S:414)<br />
<br />
Dec 03 05:46:18 kernel:<br />
Allocated by task 12184:<br />
kasan_save_stack (mm/kasan/common.c:48)<br />
kasan_save_track (./arch/x86/include/asm/current.h:49 mm/kasan/common.c:60 mm/kasan/common.c:69)<br />
__kasan_slab_alloc (mm/kasan/common.c:319 mm/kasan/common.c:345)<br />
kmem_cache_alloc_noprof (mm/slub.c:4085 mm/slub.c:4134 mm/slub.c:4141)<br />
copy_net_ns (net/core/net_namespace.c:421 net/core/net_namespace.c:480)<br />
create_new_namespaces<br />
---truncated---
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
CPE | From | Up to |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 3.12.54 (including) | 3.13 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 3.18.27 (including) | 3.19 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.1.17 (including) | 4.2 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.3.5 (including) | 6.1.121 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.67 (excluding) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.12.6 (excluding) |
cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.13:rc2:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/0f6ede9fbc747e2553612271bce108f7517e7a45
- https://git.kernel.org/stable/c/3267b254dc0a04dfa362a2be24573cfa6d2d78f5
- https://git.kernel.org/stable/c/6610c7f8a8d47fd1123eed55ba8c11c2444d8842
- https://git.kernel.org/stable/c/b7a79e51297f7b82adb687086f5cb2da446f1e40
- https://git.kernel.org/stable/c/c261dcd61c9e88a8f1a66654354d32295a975230
- https://git.kernel.org/stable/c/dac465986a4a38cd2f13e934f562b6ca344e5720