CVE-2026-31769
High · 7.8CVSS
7.8
EPSS
0.1%
Published
May 1, 2026
CISA due date
—
Cloudanix analysis
A local user with access to certain Linux instrument-control devices could crash the machine or potentially gain full control of it, so affected systems should be updated or have device access restricted.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a local Linux kernel use-after-free in the GPIB ioctl handling paths. The IBRD, IBWRT, IBCMD, and IBWAIT handlers obtain a gpib_descriptor pointer, then release the protecting board-level mutex before the operation completes. A concurrent IBCLOSEDEV ioctl can free that descriptor while another thread continues using it. If the freed kernel memory is reused in an attacker-influenced way, the bug can lead to kernel memory corruption, kernel crash, privilege escalation, or execution of code with kernel privileges. Exploitation requires local code execution and access to the affected GPIB device/interface; it is not remotely reachable by itself.
Why it matters to the business
Systems using Linux hosts for laboratory, test, measurement, industrial, or automation equipment connected through GPIB may be exposed to local privilege escalation or denial of service. A successful attacker could move from a limited local account to full system control, disrupt instrument-control workloads, or crash the host. The vulnerability is not listed in CISA KEV, has no reported ransomware use, has very low EPSS, and has no known mature public exploit, so urgency is highest for systems where untrusted users or services can access GPIB devices.
How an attack unfolds
An attacker first needs the ability to run code locally on a vulnerable Linux system and open the GPIB character device or otherwise issue GPIB ioctls. They create or obtain a valid GPIB descriptor handle, then use concurrent threads or processes to race an I/O ioctl such as IBRD, IBWRT, IBCMD, or IBWAIT against IBCLOSEDEV on the same descriptor. During the race, the I/O path drops the mutex while still retaining the descriptor pointer; the close path can free the descriptor in that window. The original I/O path then resumes and dereferences memory that has already been freed. In a simple case this causes a kernel oops or panic. With heap grooming and reliable reuse of the freed allocation, an attacker may be able to corrupt kernel memory and escalate privileges. There are currently no named threat actors, KEV listing, or public exploit maturity associated with this issue in the provided data.
How to fix it
Apply a Linux kernel update that includes the upstream fix introducing the kernel-only descriptor_busy reference count for GPIB descriptors and preventing close_dev_ioctl() from freeing descriptors while I/O handlers are active. Because no exact fixed package versions were provided, use the relevant distribution or appliance vendor advisory to identify the corrected kernel package for each platform. Reboot into the patched kernel after installation. If immediate patching is not possible, reduce exposure by disabling or unloading unused GPIB support, removing unused GPIB device nodes, and restricting access to GPIB devices to only trusted service accounts or administrative users. Device permissions, udev rules, container device passthrough settings, and group membership should be reviewed so untrusted local users cannot issue GPIB ioctls.
How to confirm the fix worked
Confirm that systems are running a vendor kernel build containing the GPIB descriptor_busy fix, not merely that a package was installed. Validate the active kernel with uname -r and compare it to the vendor’s fixed kernel version. Where source or debug symbols are available, confirm the patched code includes descriptor_busy in struct gpib_descriptor and that close_dev_ioctl() returns busy rather than freeing an in-use descriptor. Check whether GPIB is present or loaded using module and device inventory, for example by reviewing loaded gpib-related modules and /dev/gpib* device nodes. Confirm GPIB device permissions are not world-writable and are limited to trusted users. After remediation, run operational tests for legitimate GPIB read, write, command, wait, and close workflows and verify there are no kernel oops, KASAN, or lockdep reports related to gpib.
Typical attack path
- Gain local code execution on a vulnerable Linux system where GPIB support is present and accessible.
- Open the affected GPIB device and obtain a descriptor handle.
- Start one or more threads issuing IBRD, IBWRT, IBCMD, or IBWAIT ioctls using the descriptor.
- Concurrently issue IBCLOSEDEV against the same descriptor to free it while an I/O handler still references it.
- Trigger use-after-free behavior in the kernel GPIB code.
- Cause a denial of service through a kernel crash, or attempt kernel heap manipulation to achieve privilege escalation.
How to detect it
Look for evidence of attempted racing or exploitation in kernel logs, audit logs, endpoint telemetry, and device-access records. Useful sources include dmesg, journald kernel messages, /var/log/kern.log, /var/log/messages, auditd syscall records for ioctl/open/close on GPIB device nodes, EDR process telemetry showing unusual access to /dev/gpib* devices, and crash dump systems such as kdump. Since successful exploitation may only leave a kernel oops or panic, prioritize signs of gpib-related use-after-free, slab corruption, KASAN reports, page faults, general protection faults, or repeated crashes in read_ioctl, write_ioctl, command_ioctl, wait_ioctl, ibwait, general_ibstatus, or close_dev_ioctl. Also review user activity around the time of a crash for nonstandard binaries or scripts repeatedly opening GPIB devices and issuing high volumes of ioctl calls. There are no known public threat actors or ransomware campaigns tied to this vulnerability in the provided data, so detection should focus on behavioral evidence and kernel crash artifacts rather than known malware indicators.
- /dev/gpib
- /dev/gpib0
- /dev/gpib1
- IBRD
- IBWRT
- IBCMD
- IBWAIT
- IBCLOSEDEV
- gpib
- read_ioctl
- write_ioctl
- command_ioctl
- wait_ioctl
- close_dev_ioctl
- ibwait
- general_ibstatus
- descriptor_busy
- KASAN: use-after-free
- BUG: KASAN: slab-use-after-free
- BUG: KASAN: use-after-free
- kernel BUG at
- general protection fault
- BUG: unable to handle page fault
- slab-use-after-free
- use-after-free in IO ioctl handlers
What your security team should do
- Prioritize patching Linux systems that expose GPIB devices to non-administrative users, shared engineering users, lab environments, CI hardware test rigs, or containers with device passthrough.
- Inventory hosts with GPIB kernel support, loaded gpib modules, or /dev/gpib* device nodes; systems without GPIB exposure are lower priority.
- Restrict GPIB device access to trusted users and services until patched; remove broad group access and world-readable or world-writable device permissions.
- Disable or unload unused GPIB drivers where business operations do not require them.
- Monitor kernel logs for gpib-related crashes, KASAN use-after-free reports, and suspicious repeated ioctl activity involving IBRD, IBWRT, IBCMD, IBWAIT, and IBCLOSEDEV.
- Treat any gpib-related kernel crash on an unpatched multi-user system as potentially suspicious and collect volatile forensic data before rebooting where operationally feasible.
- Because EPSS is very low and the issue is not in KEV, sequence remediation after internet-facing and remotely exploitable critical vulnerabilities unless GPIB devices are accessible to untrusted local users.
The record
In the Linux kernel, the following vulnerability has been resolved: gpib: fix use-after-free in IO ioctl handlers The IBRD, IBWRT, IBCMD, and IBWAIT ioctl handlers use a gpib_descriptor pointer after board->big_gpib_mutex has been released. A concurrent IBCLOSEDEV ioctl can free the descriptor via close_dev_ioctl() during this window, causing a use-after-free. The IO handlers (read_ioctl, write_ioctl, command_ioctl) explicitly release big_gpib_mutex before calling their handler. wait_ioctl() is called with big_gpib_mutex held, but ibwait() releases it internally when wait_mask is non-zero. In all four cases, the descriptor pointer obtained from handle_to_descriptor() becomes unprotected. Fix this by introducing a kernel-only descriptor_busy reference count in struct gpib_descriptor. Each handler atomically increments descriptor_busy under file_priv->descriptors_mutex before releasing the lock, and decrements it when done. close_dev_ioctl() checks descriptor_busy under the same lock and rejects the close with -EBUSY if the count is non-zero. A reference count rather than a simple flag is necessary because multiple handlers can operate on the same descriptor concurrently (e.g. IBRD and IBWAIT on the same handle from different threads). A separate counter is needed because io_in_progress can be cleared from unprivileged userspace via the IBWAIT ioctl (through general_ibstatus() with set_mask containing CMPL), which would allow an attacker to bypass a check based solely on io_in_progress. The new descriptor_busy counter is only modified by the kernel IO paths. The lock ordering is consistent (big_gpib_mutex -> descriptors_mutex) and the handlers only hold descriptors_mutex briefly during the lookup, so there is no deadlock risk and no impact on IO throughput.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-119338 Tesseract is an open source OCR engine. CWE-416
- CVE-2026-119332 Ladybird is a truly independent web browser. CWE-416
- CVE-2026-119116 A use-after-free and double-free issue in the SetClient command handler of the… CWE-416
- CVE-2026-119378 SQLite before 3.54.0 contains a use-after-free vulnerability in the R-Tree extension that… CWE-416
- CVE-2026-119372 SQLite before 3.54.0 built with FTS3/FTS4 and SQLITE_ENABLE_FTS3_PARENTHESIS contains a… CWE-416
- CVE-2026-65586 Software installed and run as a non-privileged user may conduct improper GPU system calls… CWE-416
- CVE-2026-15466 Software installed and run as a non-privileged user may conduct improper GPU system calls… CWE-416
- CVE-2026-76031 Use after free in Input in Google Chrome prior to 156.0.8078.79 allowed a remote attacker… CWE-416