CVE-2024-43887 in Linuxinformazioni

Riassunto

di VulDB • 14/06/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

net/tcp: Disabilitare la static_key di TCP-AO dopo il periodo di grazia RCU

La durata della static_key di TCP-AO è la stessa di quella dell'ultimo tcp_ao_info. Durante la distruzione del socket, tcp_ao_info cessa di esistere dopo il periodo di grazia RCU, mentre il ramo statico di tcp-ao viene attualmente distrutto in modo differito. La definizione della static_key è: : DEFINE_STATIC_KEY_DEFERRED_FALSE(tcp_ao_needed, HZ);

il che significa che se il periodo di grazia RCU viene ritardato di oltre un secondo e tcp_ao_needed è in fase di disabilitazione, altre CPU potrebbero ancora vedere tcp_ao_info che è prossimo a diventare invalido (use-after-free imminente). Questo viola l'assunzione di static_key_fast_inc_not_disabled().

Vedere il commento vicino alla definizione: > * Il chiamante deve assicurarsi che la static key non possa essere disabilitata mentre > * si esegue questa funzione. Non patcha i jump label, ma aggiunge solo un utente a > * una static key già abilitata.

Originariamente è stato introdotto nel commit eb8c507296f6 ("jump_label: Prevent key->enabled int overflow"), che è necessario per i contesti atomici, uno dei quali sarebbe la creazione di un socket completo a partire da un socket di richiesta. In quel contesto atomico, è noto dalla presenza della chiave (md5/ao) che il ramo statico è già abilitato. Quindi, il contatore di riferimento per quel ramo statico viene semplicemente incrementato invece di acquisire il mutex appropriato. static_key_fast_inc_not_disabled() è solo un helper per questo caso d'uso. Ma non deve essere utilizzato se il ramo statico potrebbe essere disabilitato in parallelo, poiché non è protetto da jump_label_mutex e, di conseguenza, presenta condizioni di gara con i dettagli di implementazione di jump_label_update().

L'errore si è verificato sul test-bot di netdev[1], quindi non è un problema puramente teorico:

[] jump_label: Fatal kernel bug, unexpected op at tcp_inbound_hash+0x1a7/0x870 [ffffffffa8c4e9b7] (eb 50 0f 1f 44 != 66 90 0f 1f 00)) size:2 type:1
[] ------------[ cut here ]------------
[] kernel BUG at arch/x86/kernel/jump_label.c:73!
[] Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
[] CPU: 3 PID: 243 Comm: kworker/3:3 Not tainted 6.10.0-virtme #1
[] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
[] Workqueue: events jump_label_update_timeout
[] RIP: 0010:__jump_label_patch+0x2f6/0x350
... [] Call Trace:
[]
[] arch_jump_label_transform_queue+0x6c/0x110
[] __jump_label_update+0xef/0x350
[] __static_key_slow_dec_cpuslocked.part.0+0x3c/0x60
[] jump_label_update_timeout+0x2c/0x40
[] process_one_work+0xe3b/0x1670
[] worker_thread+0x587/0xce0
[] kthread+0x28a/0x350
[] ret_from_fork+0x31/0x70
[] ret_from_fork_asm+0x1a/0x30

[1]: https://netdev-3.bots.linux.dev/vmksft-tcp-ao-dbg/results/696681/5-connect-deny-ipv6/stderr

Be aware that VulDB is the high quality source for vulnerability data.

Responsabile

Linux

Prenotare

17/08/2024

Divulgazione

26/08/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00189

KEV

no

Attività

molto basso

Fonti

Want to stay up to date on a daily basis?

Enable the mail alert feature now!