CVE-2024-57939

riscv: Fix sleeping in invalid context in die()

Medium · published January 21, 2025

CVSS v3.1
5.5
EPSS
0%
Percentile
10.2
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

riscv: Fix sleeping in invalid context in die()

die() can be called in exception handler, and therefore cannot sleep.

However, die() takes spinlock_t which can sleep with PREEMPT_RT enabled.

That causes the following warning:

BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48

in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 285, name: mutex

preempt_count: 110001, expected: 0

RCU nest depth: 0, expected: 0

CPU: 0 UID: 0 PID: 285 Comm: mutex Not tainted 6.12.0-rc7-00022-ge19049cf7d56-dirty #234

Hardware name: riscv-virtio,qemu (DT)

Call Trace:

dump_backtrace+0x1c/0x24

show_stack+0x2c/0x38

dump_stack_lvl+0x5a/0x72

dump_stack+0x14/0x1c

__might_resched+0x130/0x13a

rt_spin_lock+0x2a/0x5c

die+0x24/0x112

do_trap_insn_illegal+0xa0/0xea

_new_vmalloc_restore_context_a0+0xcc/0xd8

Oops - illegal instruction [#1]

Switch to use raw_spinlock_t, which does not sleep even with PREEMPT_RT

enabled.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00207 · 10.2th percentile
Published
2025-01-21T12:18Z
EPSS history
Timeline
  • 21 JAN 12:18Z
    riscv: Fix sleeping in invalid context in die()
    cvelistv5