Cloudanix VulnDB

CVE-2026-31551

Medium · 5.5

CVSS

5.5

EPSS

0.2%

Published

Apr 24, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A local user with access to a Linux wireless debugging interface may be able to crash or freeze the device, so affected systems should be updated and that debugging access should be restricted.

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

What it actually does

This is a local race condition in the Linux kernel mac80211 debugfs handler for the AQL enable/disable control. Concurrent writes to the mac80211 debugfs entry can cause the kernel static branch reference counter for aql_disable to underflow, triggering a kernel warning/BUG path in jump_label handling. The practical impact is availability loss: a local user with permission to write to the relevant debugfs file can destabilize the kernel and potentially crash or hang the system. The CVSS vector indicates local access, low attack complexity, low privileges, no user interaction, no confidentiality impact, no integrity impact, and high availability impact.

Why it matters to the business

Successful exploitation can cause affected Linux systems using the mac80211 wireless stack with debugfs exposed to become unstable or unavailable. For workstations, embedded Linux devices, wireless appliances, lab systems, or infrastructure that relies on Wi-Fi functionality, this can result in service interruption, device reboot requirements, operational downtime, or degraded wireless service. The current EPSS is very low and flat over 30 days, it is not listed in CISA KEV, and no public exploit maturity is reported, so broad internet-scale exploitation is unlikely; however, the issue still matters where local users, containers, test harnesses, or less-trusted workloads can access debugfs.

How an attack unfolds

An attacker first needs local code execution on an affected Linux system and sufficient permissions to write to the mac80211 AQL debugfs control. The attacker then performs concurrent writes that toggle the AQL setting through debugfs. Because the vulnerable code checks the static branch state and later increments or decrements it without serializing concurrent writers, two or more writes can observe stale state and perform an invalid decrement. This causes a static_branch_dec/static_key underflow in the kernel jump label subsystem. The resulting kernel warning or fault can destabilize the host, leading to denial of service. This is not a remote code execution issue and does not directly expose data or allow privilege escalation based on the provided information.

How to fix it

Apply a Linux kernel update from the relevant distribution or vendor that includes the mac80211 fix replacing reference-counted static_branch_inc()/static_branch_dec() behavior with static_branch_enable()/static_branch_disable() for this control path. No exact fixed package versions were provided in the input, so use vendor advisories, distribution security trackers, or upstream stable kernel changelogs to identify the first fixed kernel for each supported branch. As interim mitigation, avoid exposing debugfs on production systems unless required, unmount debugfs where possible, restrict access to /sys/kernel/debug to trusted administrators only, prevent containers from mounting or accessing host debugfs, and limit local shell access on systems using affected kernels. Reboot into the updated kernel after installation; installing a kernel package alone is not sufficient until the fixed kernel is running.

How to confirm the fix worked

Confirm the system is running a kernel build that includes the mac80211 aql_disable static branch fix, not merely that an updated package is installed. Validate with uname -a, distribution package metadata, and vendor advisory references. Check whether debugfs is mounted at /sys/kernel/debug and whether mac80211 debugfs entries are present; if debugfs is not mounted or is inaccessible to non-administrative users, exposure is reduced. On patched systems, concurrent writes to the relevant AQL debugfs control should not produce static_branch_dec underflow warnings, jump_label warnings, kernel oops messages, soft lockups, or unexpected reboots. For fleet validation, inventory Linux kernel versions and prioritize systems with wireless/mac80211 support and debugfs enabled.

Typical attack path

  1. Gain local access to an affected Linux system, either as a local user, compromised process, container with excessive host filesystem access, or test workload.
  2. Identify that debugfs is mounted and that mac80211 debugfs entries are available for the wireless interface stack.
  3. Obtain write access to the relevant mac80211 AQL debugfs control, commonly requiring elevated privileges or overly permissive debugfs exposure.
  4. Launch multiple concurrent writes that rapidly toggle the AQL enable/disable value.
  5. Trigger a race in aql_enable_write() where the static branch state changes between the state check and the increment/decrement operation.
  6. Cause a static_branch_dec/static_key underflow in the kernel jump label code.
  7. Crash, hang, or otherwise destabilize the system, resulting in local denial of service.

How to detect it

To determine whether exploitation has already occurred, review kernel logs and system journals for warnings, oopses, panics, soft lockups, or reboots that reference mac80211 debugfs, aql_enable_write(), static_branch_dec(), static_key underflow, or jump_label.c. Useful sources include journalctl -k, /var/log/kern.log, /var/log/messages, /var/log/syslog, dmesg output, pstore/ramoops records after reboot, crash dumps, and endpoint telemetry that records process activity against /sys/kernel/debug. Correlate kernel events with auditd, eBPF, EDR, or shell history showing writes to mac80211 debugfs entries. Look for bursts of concurrent write operations to AQL-related debugfs files shortly before a kernel warning, soft lockup, panic, or unexplained reboot. There are no known named threat actors or ransomware campaigns associated with this issue from the provided data, so detection should focus on local abuse patterns and kernel crash artifacts rather than remote network indicators.

  • static_branch_dec() underflow
  • __static_key_slow_dec_cpuslocked
  • __static_key_slow_dec
  • static_key_slow_dec
  • kernel/jump_label.c:311
  • kernel/jump_label.c:321
  • kernel/jump_label.c:336
  • aql_enable_write
  • net/mac80211/debugfs.c:343
  • short_proxy_write
  • fs/debugfs/file.c:383
  • val == 0
  • WARNING: kernel/jump_label.c:311
  • mac80211
  • aql_disable
  • /sys/kernel/debug
  • /sys/kernel/debug/ieee80211
  • soft lockup
  • kernel oops
  • Kernel panic
  • BUG: kernel NULL pointer dereference
  • Tainted: G U L

What your security team should do

  • Patch or upgrade affected Linux kernels through the operating system vendor and reboot into the fixed kernel.
  • Prioritize systems where debugfs is mounted, Wi-Fi/mac80211 is enabled, or local users and untrusted workloads have interactive or containerized access.
  • Restrict /sys/kernel/debug to root-only administrative use and unmount debugfs on production systems where it is not operationally required.
  • Review container runtime and sandbox policies to ensure containers cannot mount or write to host debugfs.
  • Monitor kernel logs for static_branch_dec, static_key, jump_label, aql_enable_write, mac80211 debugfs, soft lockup, kernel oops, or unexpected reboot events.
  • Treat repeated local kernel warning/oops events involving aql_enable_write as potential denial-of-service attempts, especially if correlated with local user activity or suspicious concurrent writes.
  • Because EPSS is low, KEV is false, and no mature exploit is reported, schedule remediation according to normal kernel maintenance unless affected systems expose debugfs to less-trusted local users, in which case accelerate patching.

The record

In the Linux kernel, the following vulnerability has been resolved: wifi: mac80211: Fix static_branch_dec() underflow for aql_disable. syzbot reported static_branch_dec() underflow in aql_enable_write(). [0] The problem is that aql_enable_write() does not serialise concurrent write()s to the debugfs. aql_enable_write() checks static_key_false(&aql_disable.key) and later calls static_branch_inc() or static_branch_dec(), but the state may change between the two calls. aql_disable does not need to track inc/dec. Let's use static_branch_enable() and static_branch_disable(). [0]: val == 0 WARNING: kernel/jump_label.c:311 at __static_key_slow_dec_cpuslocked.part.0+0x107/0x120 kernel/jump_label.c:311, CPU#0: syz.1.3155/20288 Modules linked in: CPU: 0 UID: 0 PID: 20288 Comm: syz.1.3155 Tainted: G U L syzkaller #0 PREEMPT(full) Tainted: [U]=USER, [L]=SOFTLOCKUP Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/24/2026 RIP: 0010:__static_key_slow_dec_cpuslocked.part.0+0x107/0x120 kernel/jump_label.c:311 Code: f2 c9 ff 5b 5d c3 cc cc cc cc e8 54 f2 c9 ff 48 89 df e8 ac f9 ff ff eb ad e8 45 f2 c9 ff 90 0f 0b 90 eb a2 e8 3a f2 c9 ff 90 <0f> 0b 90 eb 97 48 89 df e8 5c 4b 33 00 e9 36 ff ff ff 0f 1f 80 00 RSP: 0018:ffffc9000b9f7c10 EFLAGS: 00010293 RAX: 0000000000000000 RBX: ffffffff9b3e5d40 RCX: ffffffff823c57b4 RDX: ffff8880285a0000 RSI: ffffffff823c5846 RDI: ffff8880285a0000 RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 000000000000000a R13: 1ffff9200173ef88 R14: 0000000000000001 R15: ffffc9000b9f7e98 FS: 00007f530dd726c0(0000) GS:ffff8881245e3000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000200000001140 CR3: 000000007cc4a000 CR4: 00000000003526f0 Call Trace: <TASK> __static_key_slow_dec_cpuslocked kernel/jump_label.c:297 [inline] __static_key_slow_dec kernel/jump_label.c:321 [inline] static_key_slow_dec+0x7c/0xc0 kernel/jump_label.c:336 aql_enable_write+0x2b2/0x310 net/mac80211/debugfs.c:343 short_proxy_write+0x133/0x1a0 fs/debugfs/file.c:383 vfs_write+0x2aa/0x1070 fs/read_write.c:684 ksys_pwrite64 fs/read_write.c:793 [inline] __do_sys_pwrite64 fs/read_write.c:801 [inline] __se_sys_pwrite64 fs/read_write.c:798 [inline] __x64_sys_pwrite64+0x1eb/0x250 fs/read_write.c:798 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xc9/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f530cf9aeb9 Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f530dd72028 EFLAGS: 00000246 ORIG_RAX: 0000000000000012 RAX: ffffffffffffffda RBX: 00007f530d215fa0 RCX: 00007f530cf9aeb9 RDX: 0000000000000003 RSI: 0000000000000000 RDI: 0000000000000010 RBP: 00007f530d008c1f R08: 0000000000000000 R09: 0000000000000000 R10: 4200000000000005 R11: 0000000000000246 R12: 0000000000000000 R13: 00007f530d216038 R14: 00007f530d215fa0 R15: 00007ffde89fb978 </TASK>

Affected packages

Ecosystem Package Introduced Fixed

Related vulnerabilities