CVE-2026-63931
Medium · 5.5CVSS
5.5
EPSS
0.2%
Published
Jul 19, 2026
CISA due date
—
Cloudanix analysis
A local user or process may be able to crash certain Linux systems that use a specific chemical sensor driver by writing an invalid sensor setting.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Medium
What it actually does
CVE-2026-63931 is a Linux kernel denial-of-service flaw in the Industrial I/O SCD30 chemical sensor driver. When a user writes a sampling frequency value with a zero fractional component to the driver’s `sampling_frequency` sysfs attribute, the driver can use that zero value as a divisor in `write_raw`, causing a kernel division-by-zero exception. Depending on kernel configuration and runtime settings, this can result in a kernel oops, driver malfunction, system instability, or a full kernel panic, especially where `panic_on_oops` is enabled.
Why it matters to the business
Systems using the affected Linux kernel driver for SCD30 chemical sensors may be vulnerable to local disruption. An attacker or faulty local process with permission to write the relevant sysfs attribute could crash or destabilize the host, interrupting sensor collection, embedded/IoT monitoring, industrial telemetry, or edge workloads. The risk is narrower than a remote network flaw because exploitation requires local write access to the device attribute and the vulnerable driver/device path to be present. EPSS is currently low and the issue is not listed in CISA KEV, but availability-sensitive deployments should still prioritize remediation where this driver is loaded.
How an attack unfolds
An attacker first needs local code execution or an account/process with write permission to the SCD30 Industrial I/O sysfs controls. The system must have the affected SCD30 driver loaded and an exposed `sampling_frequency` attribute for the device. The attacker writes a crafted sampling frequency value whose fractional portion is zero to the sysfs attribute. The vulnerable kernel code then processes the write request in the driver’s `write_raw` path and performs a division using the zero fractional value. This triggers a divide-by-zero exception in kernel context. The immediate result is typically a kernel oops and failed write operation; on systems configured to panic after kernel oopses, or where the fault destabilizes critical kernel paths, the attack can cause a full system crash and service outage.
How to fix it
Upgrade to a Linux kernel build from the relevant distribution or vendor that includes the SCD30 driver fix adding a zero check before division in the sampling frequency write path. No exact fixed package versions were provided, so use vendor advisories, kernel changelogs, or stable kernel release notes to identify the corrected build. Where immediate patching is not possible, reduce exposure by unloading or blacklisting the SCD30 driver if the sensor is not required, removing or disabling the affected hardware path, restricting write access to Industrial I/O sysfs attributes, and preventing untrusted local users or services from modifying `/sys/bus/iio/devices/*/sampling_frequency`. For high-availability systems, review `kernel.panic_on_oops` behavior because it can turn this flaw from a contained kernel oops into a full host reboot.
How to confirm the fix worked
Confirm the running kernel package includes the upstream/vendor fix for `drivers/iio/chemical/scd30` handling of zero fractional sampling frequency values. Verify the active kernel after reboot with `uname -a` and package-manager queries such as `rpm -q kernel`, `dpkg -l 'linux-image*'`, or the platform’s equivalent. Check whether the vulnerable driver is in use with `lsmod | grep -E 'scd30|iio'`, `modinfo scd30_core`, and by looking for SCD30-related devices under `/sys/bus/iio/devices/`. Validate mitigations by confirming unneeded SCD30 modules are not loaded and are blocked from autoloading. Do not validate by intentionally writing the crashing value on production systems; use a patched test system or source/package verification instead.
Typical attack path
- Gain local access to a Linux system, container escape context, privileged script path, or service account able to write to relevant sysfs device attributes.
- Confirm the SCD30 Industrial I/O driver is present and the `sampling_frequency` sysfs attribute exists under `/sys/bus/iio/devices/`.
- Write a sampling frequency value with a zero fractional component to the affected `sampling_frequency` attribute.
- Trigger the vulnerable `scd30` driver `write_raw` path, causing a kernel division-by-zero exception.
- Cause a kernel oops, device/driver disruption, or full system panic depending on kernel configuration.
How to detect it
Look for evidence of local writes to Industrial I/O sysfs sampling frequency attributes followed by kernel exceptions. Relevant log sources include `journalctl -k`, `/var/log/kern.log`, `/var/log/messages`, `/var/log/syslog`, auditd logs, EDR process telemetry, shell history for privileged users, and crash dump records such as kdump/vmcore metadata. Search for kernel divide errors, oopses, or panics referencing SCD30 driver functions, `write_raw`, Industrial I/O, or `sampling_frequency`. If auditd or EDR file-write telemetry is available, look for writes to `/sys/bus/iio/devices/iio:device*/sampling_frequency`, especially values ending in `.0`, `.000000`, or otherwise representing a zero fractional component. Correlate suspicious writes with subsequent host reboot, kernel oops, kdump capture, service interruption, or sensor telemetry gaps. There are no known named threat actors or public exploitation campaigns in the provided intelligence, so prioritize host-local forensic artifacts rather than network indicators.
- /sys/bus/iio/devices/iio:device*/sampling_frequency
- sampling_frequency
- scd30_write_raw
- scd30
- scd30_core
- drivers/iio/chemical/scd30
- divide error: 0000
- Oops: divide error
- kernel BUG at drivers/iio/chemical/scd30
- RIP: 0010:scd30_write_raw
- panic_on_oops
- Kernel panic - not syncing
- iio:device
What your security team should do
- Inventory Linux systems that use Industrial I/O SCD30 chemical/CO2 sensors or load SCD30-related kernel modules.
- Patch affected systems to a vendor kernel containing the SCD30 division-by-zero fix, prioritizing embedded, IoT, industrial, and availability-sensitive hosts.
- If the SCD30 sensor is not required, unload and blacklist the SCD30 driver modules to remove the attack surface.
- Restrict local write access to `/sys/bus/iio/devices/*/sampling_frequency` and review privileged services or automation that can write to sysfs.
- Enable audit logging for writes to Industrial I/O sysfs attributes on systems where the driver is present.
- Review kernel logs for recent divide-by-zero or oops events involving SCD30 driver functions.
- Confirm whether `kernel.panic_on_oops` is enabled and assess the operational risk of kernel oopses causing automatic reboot.
- Because EPSS is low, exploit maturity is reported as none, and the CVE is not in KEV, treat this as targeted/local availability risk rather than broad internet-facing emergency exposure.
The record
In the Linux kernel, the following vulnerability has been resolved: iio: chemical: scd30: fix division by zero in write_raw Add a zero check for val2 before using it as a divisor when setting the sampling frequency. A user writing a zero fractional part to the sampling_frequency sysfs attribute triggers a division by zero in the kernel.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-59959 SAIL is a cross-platform library for loading and saving images with support for… CWE-369
- CVE-2026-112054 Schroedinger libschroedinger through 1.0.11 contains a divide by zero vulnerability that… CWE-369
- CVE-2025-55653 GPAC MP4Box v2.4 was discovered to contain a floating point exception in the… CWE-369
- CVE-2026-93589 ImageMagick before 7.1.2-31 and 6.9.13-56 contains a division-by-zero flaw in the FLIF… CWE-369
- CVE-2026-15417 In the silabser.sys Windows 8 driver for CP210x devices, a local unprivileged user can… CWE-369
- CVE-2026-6244 libpcap BPF interpreter for the 'div #k' and 'mod #k' ALU instructions does not check… CWE-369
- CVE-2026-85458 Divide-by-zero in Xpdf 4.06 (and earlier), when a glyph in a Type 3 font has a zero… CWE-369
- CVE-2026-38345 A Division-by-Zero vulnerability in the ff_sws_init_single_context function… CWE-369