CVE-2023-53419
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
18/09/2025
Última modificación:
19/09/2025
Descripción
*** Pendiente de traducción *** In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
rcu: Protect rcu_print_task_exp_stall() ->exp_tasks access<br />
<br />
For kernels built with CONFIG_PREEMPT_RCU=y, the following scenario can<br />
result in a NULL-pointer dereference:<br />
<br />
CPU1 CPU2<br />
rcu_preempt_deferred_qs_irqrestore rcu_print_task_exp_stall<br />
if (special.b.blocked) READ_ONCE(rnp->exp_tasks) != NULL<br />
raw_spin_lock_rcu_node<br />
np = rcu_next_node_entry(t, rnp)<br />
if (&t->rcu_node_entry == rnp->exp_tasks)<br />
WRITE_ONCE(rnp->exp_tasks, np)<br />
....<br />
raw_spin_unlock_irqrestore_rcu_node<br />
raw_spin_lock_irqsave_rcu_node<br />
t = list_entry(rnp->exp_tasks->prev,<br />
struct task_struct, rcu_node_entry)<br />
(if rnp->exp_tasks is NULL, this<br />
will dereference a NULL pointer)<br />
<br />
The problem is that CPU2 accesses the rcu_node structure&#39;s->exp_tasks<br />
field without holding the rcu_node structure&#39;s ->lock and CPU2 did<br />
not observe CPU1&#39;s change to rcu_node structure&#39;s ->exp_tasks in time.<br />
Therefore, if CPU1 sets rcu_node structure&#39;s->exp_tasks pointer to NULL,<br />
then CPU2 might dereference that NULL pointer.<br />
<br />
This commit therefore holds the rcu_node structure&#39;s ->lock while<br />
accessing that structure&#39;s->exp_tasks field.<br />
<br />
[ paulmck: Apply Frederic Weisbecker feedback. ]
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/2bc0ae94ef1f9ed322d8ee439de3239ea3632ab2
- https://git.kernel.org/stable/c/3c1566bca3f8349f12b75d0a2d5e4a20ad6262ec
- https://git.kernel.org/stable/c/a7d21b8585894e6fff973f6ddae42f02b13f600f
- https://git.kernel.org/stable/c/d0a8c0e31a09ec1efd53079083e2a677956b4d91
- https://git.kernel.org/stable/c/e30a55e98ae6c44253d8b129efefd5da5bc6e3bc