CVE-2026-98094

staging: fbtft: make dirty_lock IRQ-safe

MEDIUM
5.5
CVSS Score
Published: September 25, 2026 at 10:24 AM UTC
Updated: October 23, 2026 at 06:55 PM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM5.5
Exploit prediction
EPSS 0.1%

Description

In the Linux kernel, the following vulnerability has been resolved: staging: fbtft: make dirty_lock IRQ-safe fbtft_mkdirty() can be reached from the fbcon rendering path while processing printk() in hardirq context. Meanwhile, dirty_lock is also taken by fbtft_deferred_io() in workqueue context with local interrupts enabled. Lockdep reports a possible IRQ lock inversion involving dirty_lock and console_owner. A hardirq can interrupt a CPU holding dirty_lock and enter the console rendering path, which can attempt to acquire dirty_lock again. The following lockdep report was observed on an RK3566 system with CONFIG_PROVE_LOCKING enabled: WARNING: possible irq lock inversion dependency detected swapper/2/0 just changed the state of lock: (console_owner){-...}-{0:0} but this lock took another, HARDIRQ-unsafe lock in the past: (&par->dirty_lock){+.+.}-{2:2} CPU0 CPU1 ---- ---- lock(&par->dirty_lock); local_irq_disable(); lock(console_owner); lock(&par->dirty_lock); <Interrupt> lock(console_owner); *** DEADLOCK *** Use spin_lock_irqsave() for fbtft_mkdirty() and spin_lock_irq() for fbtft_deferred_io(). They only access the dirty line range, so the IRQ-off regions remain short.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

4.0 ≤ v < 5.10.2715.11 ≤ v < 5.15.2225.16 ≤ v < 6.1.1896.13 ≤ v < 6.18.536.19 ≤ v < 7.2.76.2 ≤ v < 6.6.1586.7 ≤ v < 6.12.1114.07.3c296d5f9957c03994a699d6739c27d4581a9f6c7
Vendor states this is fixed in 0843298b159599ee7bc6d14800efdb4bc7349706 (fixed)
Vendor states this is fixed in 10cc145b873670438d3b105133dffdae70822db6 (fixed)
Vendor states this is fixed in 2a609e29efbba79f9abd68c4ec8a2bd7ecf291e7 (fixed)
Vendor states this is fixed in a323066337ed85c38decfc7f6bbf42f27605dff1 (fixed)
Vendor states this is fixed in dcb48fde8003492256dee45815144aa5ed26ce7c (fixed)
Vendor states this is fixed in f0c869df2c33793c8828acaab3e4a5e0176f9f00 (fixed)
Vendor states this is fixed in f2451e18826eb6a33ea51419f39bdd2eb99fa1ea (fixed)
Vendor states this is fixed in f576944a59f31bcffff121117ebf452c5dd162b7 (fixed)
Vendor states this is fixed in 4.0 (unaffected)
Vendor states this is fixed in 5.10.271 (unaffected)
Vendor states this is fixed in 5.15.222 (unaffected)
Vendor states this is fixed in 6.1.189 (unaffected)
Vendor states this is fixed in 6.12.111 (unaffected)
Vendor states this is fixed in 6.18.53 (unaffected)
Vendor states this is fixed in 6.6.158 (unaffected)
Vendor states this is fixed in 7.2.7 (unaffected)
Vendor states this is fixed in 7.3 (unaffected)
Vendor states this is fixed in 7.3-rc2 (unaffected)

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusANALYZED
CWE
CWE-667

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card