Description
The device multiplexer pseudo-driver in drivers/misc/devmux/devmux.c exposes two system calls, devmux_select_get() and devmux_select_set(). When CONFIG_USERSPACE is enabled, their user-mode verifiers z_vrfy_devmux_select_get() and z_vrfy_devmux_select_set() forwarded directly to the kernel implementations without performing any kernel-object validation — no k_object_access_check() and no driver object check. Compounding this, DEVICE_DT_INST_DEFINE() registered devmux instances with a NULL driver API pointer, which causes scripts/build/gen_kobject_list.py to skip them entirely, so a devmux device had no struct k_object and no permission on it could be granted or withheld in the first place.

Any thread running in user mode can reach the defect: device pointers such as DEVICE_DT_GET(DT_NODELABEL(devmux0)) are compile-time constants available to application code, and the syscall accepted them from a thread that had never been granted access to the device. The kernel implementations do validate the pointer against the static devmux instance table and bounds-check the selection index, so this is not a memory-safety issue; the failure is purely one of authorization. Exposure requires CONFIG_USERSPACE=y together with the experimental CONFIG_DEVMUX=y (which depends on CONFIG_DEVICE_MUTABLE) and a zephyr,devmux devicetree node.

An unprivileged user-mode thread can read and change which downstream device a multiplexer forwards to, bypassing the userspace object-permission model. Because a devmux forwards the data, configuration and API of the selected device — its documented use being zephyr,console and zephyr,shell-uart switching — an attacker can suppress console, log and shell output, redirect that output to a downstream device it is able to observe, or flip the selection underneath another thread that is legitimately using the multiplexer. The impact is bounded to the devicetree-fixed set of downstream devices; no out-of-bounds access or arbitrary pointer dereference is reachable.

The fix declares __subsystem struct devmux_driver_api and attaches a DEVICE_API(devmux, devmux_api) instance to each devmux device so that it becomes a tracked K_OBJ_DRIVER_DEVMUX kernel object, and adds K_OOPS(devmux_inst_get(dev) == SIZE_MAX) plus K_OOPS(k_object_access_check(dev) != 0) to both verifiers.
Published: 2026-10-21
Score: 5.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Unauthorized device reconfiguration
Action: Patch immediately
AI Analysis

Impact

The kernel object permission check for the devmux pseudo-driver is missing. When user mode is enabled with the experimental devmux subsystem, the verifiers simply forward the requested device pointer to the kernel without validating the caller’s access rights. The kernel does only bounds checking on the selection index, so the flaw is purely an authorization bypass. An attacker can switch the downstream device that the multiplexer forwards to, allowing the suppression or redirection of console, shell or logging output. The flaw does not provide memory corruption or arbitrary code execution; it only permits unauthorized configuration of a fixed set of downstream devices defined in the devicetree.

Affected Systems

The vulnerability impacts the Zephyr RTOS kernel when CONFIG_USERSPACE=y and CONFIG_DEVMUX=y (which depends on CONFIG_DEVICE_MUTABLE) are enabled, and a zephyr,devmux device node is defined in the device tree. The affected product is the Zephyr project’s kernel code, specifically the devmux driver located in drivers/misc/devmux/devmux.c.

Risk and Exploitability

The CVSS score of 5.3 indicates a moderate severity. EPSS is not available and the issue is not listed in CISA KEV. The attack vector is user‑mode threads running within the Zephyr application. Because the flaw does not involve out‑of‑bounds memory access or privilege escalation to the kernel, the exploitation is limited to manipulating device selection for the pre‑identified devmux nodes. An attacker can redirect or suppress console output, alter shell data, or interfere with other threads that use the same multiplexer.

Generated by OpenCVE AI on October 22, 2026 at 04:13 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update to Zephyr kernel revision that includes the patch for the devmux permission check (commit 4b7f98345d8f894f4b8aabe52a2623d843669fac).
  • Disable the devmux subsystem by setting CONFIG_DEVMUX=n in the Zephyr Kconfig or remove zephyr,devmux nodes from the device tree if the feature is not required.
  • If the subsystem must remain enabled, restrict CONFIG_USERSPACE or enforce stricter userdata permissions so that only authorized threads can obtain access to devmux devices.

Generated by OpenCVE AI on October 22, 2026 at 04:13 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 23 Oct 2026 22:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 22 Oct 2026 02:15:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Wed, 21 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
Description The device multiplexer pseudo-driver in drivers/misc/devmux/devmux.c exposes two system calls, devmux_select_get() and devmux_select_set(). When CONFIG_USERSPACE is enabled, their user-mode verifiers z_vrfy_devmux_select_get() and z_vrfy_devmux_select_set() forwarded directly to the kernel implementations without performing any kernel-object validation — no k_object_access_check() and no driver object check. Compounding this, DEVICE_DT_INST_DEFINE() registered devmux instances with a NULL driver API pointer, which causes scripts/build/gen_kobject_list.py to skip them entirely, so a devmux device had no struct k_object and no permission on it could be granted or withheld in the first place. Any thread running in user mode can reach the defect: device pointers such as DEVICE_DT_GET(DT_NODELABEL(devmux0)) are compile-time constants available to application code, and the syscall accepted them from a thread that had never been granted access to the device. The kernel implementations do validate the pointer against the static devmux instance table and bounds-check the selection index, so this is not a memory-safety issue; the failure is purely one of authorization. Exposure requires CONFIG_USERSPACE=y together with the experimental CONFIG_DEVMUX=y (which depends on CONFIG_DEVICE_MUTABLE) and a zephyr,devmux devicetree node. An unprivileged user-mode thread can read and change which downstream device a multiplexer forwards to, bypassing the userspace object-permission model. Because a devmux forwards the data, configuration and API of the selected device — its documented use being zephyr,console and zephyr,shell-uart switching — an attacker can suppress console, log and shell output, redirect that output to a downstream device it is able to observe, or flip the selection underneath another thread that is legitimately using the multiplexer. The impact is bounded to the devicetree-fixed set of downstream devices; no out-of-bounds access or arbitrary pointer dereference is reachable. The fix declares __subsystem struct devmux_driver_api and attaches a DEVICE_API(devmux, devmux_api) instance to each devmux device so that it becomes a tracked K_OBJ_DRIVER_DEVMUX kernel object, and adds K_OOPS(devmux_inst_get(dev) == SIZE_MAX) plus K_OOPS(k_object_access_check(dev) != 0) to both verifiers.
Title Missing kernel object permission check in devmux syscalls allows unprivileged user threads to retarget a device multiplexer
Weaknesses CWE-862
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-10-23T21:23:27.801Z

Reserved: 2026-08-15T18:43:26.567Z

Link: CVE-2026-19947

cve-icon Vulnrichment

Updated: 2026-10-23T20:43:44.333Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-21T19:17:02.787

Modified: 2026-10-23T22:16:59.977

Link: CVE-2026-19947

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T04:15:09Z

Weaknesses