Cloudanix VulnDB

CVE-2023-54160

None

CVSS

—

EPSS

0.2%

Published

Dec 24, 2025

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A kernel bug on certain ARM servers can crash the system when CPUs are added or removed during operation.

Exploitation
Other
Attacker needs
Local User
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Race Condition
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The flaw triggers a sleeping function call from an invalid context (interrupts disabled during STARTING CPU hotplug phase) inside sdei_cpuhp_up() while holding sdei_list_lock, causing BUG on preempt-rt kernels.

Why it matters to the business

System instability and crashes during CPU hotplug operations on affected ARM platforms using real-time kernels, potentially reducing availability in high-uptime or embedded deployments.

How an attack unfolds

An attacker with local access can trigger CPU offline/online events (via hotplug interfaces) to exercise the SDEI callback path while interrupts are disabled, surfacing the sleep-in-atomic BUG and crashing the kernel.

How to fix it

Upgrade the Linux kernel to the commit 59842a9ba27d5390ae5bf3233a92cad3a26d495c or later stable releases containing the fix that relocates the SDEI CPUHP callback to CPUHP_AP_ONLINE_DYN.

How to confirm the fix worked

Confirm kernel version contains commit 59842a9ba27d5390ae5bf3233a92cad3a26d495c; verify no BUG messages referencing sdei_cpuhp_up or sdei_list_lock during CPU hotplug on preempt-rt configurations.

Typical attack path

  1. Obtain local unprivileged access on affected Linux system
  2. Trigger CPU hotplug events via sysfs or userspace tools
  3. Cause sdei_cpuhp_up to run in STARTING phase with IRQs disabled
  4. Hit rt_spin_lock sleep while non-preemptible, triggering kernel BUG

How to detect it

Search kernel logs for 'sleeping function called from invalid context' combined with 'sdei_cpuhp_up' or 'sdei_list_lock' stack traces during cpuhp activity.

What your security team should do

  • Prioritize kernel upgrade to fixed commit on all preempt-rt ARM deployments
  • Monitor CPU hotplug activity in production environments until patched
  • Test hotplug paths in staging before applying to production

The record

In the Linux kernel, the following vulnerability has been resolved: firmware: arm_sdei: Fix sleep from invalid context BUG Running a preempt-rt (v6.2-rc3-rt1) based kernel on an Ampere Altra triggers: BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:46 in_atomic(): 0, irqs_disabled(): 128, non_block: 0, pid: 24, name: cpuhp/0 preempt_count: 0, expected: 0 RCU nest depth: 0, expected: 0 3 locks held by cpuhp/0/24: #0: ffffda30217c70d0 (cpu_hotplug_lock){++++}-{0:0}, at: cpuhp_thread_fun+0x5c/0x248 #1: ffffda30217c7120 (cpuhp_state-up){+.+.}-{0:0}, at: cpuhp_thread_fun+0x5c/0x248 #2: ffffda3021c711f0 (sdei_list_lock){....}-{3:3}, at: sdei_cpuhp_up+0x3c/0x130 irq event stamp: 36 hardirqs last enabled at (35): [<ffffda301e85b7bc>] finish_task_switch+0xb4/0x2b0 hardirqs last disabled at (36): [<ffffda301e812fec>] cpuhp_thread_fun+0x21c/0x248 softirqs last enabled at (0): [<ffffda301e80b184>] copy_process+0x63c/0x1ac0 softirqs last disabled at (0): [<0000000000000000>] 0x0 CPU: 0 PID: 24 Comm: cpuhp/0 Not tainted 5.19.0-rc3-rt5-[...] Hardware name: WIWYNN Mt.Jade Server [...] Call trace: dump_backtrace+0x114/0x120 show_stack+0x20/0x70 dump_stack_lvl+0x9c/0xd8 dump_stack+0x18/0x34 __might_resched+0x188/0x228 rt_spin_lock+0x70/0x120 sdei_cpuhp_up+0x3c/0x130 cpuhp_invoke_callback+0x250/0xf08 cpuhp_thread_fun+0x120/0x248 smpboot_thread_fn+0x280/0x320 kthread+0x130/0x140 ret_from_fork+0x10/0x20 sdei_cpuhp_up() is called in the STARTING hotplug section, which runs with interrupts disabled. Use a CPUHP_AP_ONLINE_DYN entry instead to execute the cpuhp cb later, with preemption enabled. SDEI originally got its own cpuhp slot to allow interacting with perf. It got superseded by pNMI and this early slot is not relevant anymore. [1] Some SDEI calls (e.g. SDEI_1_0_FN_SDEI_PE_MASK) take actions on the calling CPU. It is checked that preemption is disabled for them. _ONLINE cpuhp cb are executed in the 'per CPU hotplug thread'. Preemption is enabled in those threads, but their cpumask is limited to 1 CPU. Move 'WARN_ON_ONCE(preemptible())' statements so that SDEI cpuhp cb don't trigger them. Also add a check for the SDEI_1_0_FN_SDEI_PRIVATE_RESET SDEI call which acts on the calling CPU. [1]: https://lore.kernel.org/all/5813b8c5-ae3e-87fd-fccc-94c9cd08816d@arm.com/

Affected packages

Ecosystem Package Introduced Fixed
Linux Kernel 4.16.0 4.19.284

Related vulnerabilities