CVE-2026-10682: Out-of-bounds write in Zephyr `log_filter_set` syscall verifier reachable from userspace
The userspace verifier zvrfylogfilterset() for the logfilterset syscall in subsys/logging/logmgmt.c performed a signed comparison against the int16t srcid parameter: srcid < (int16t)logsrccntget(domainid). Any negative value for srcid (e.g. -1) trivially satisfied this check and was forwarded into zimpllogfilterset, where it propagated to filterset() and ultimately to getdynamicfilter(), which uses sourceid as an unsigned index into the linker-section array &TYPESECTIONSTART(logdynamic)[sourceid].filters.
After implicit conversion through uint32t, an int16t -1 becomes 0xFFFFFFFF, indexing logdynamic far out of bounds and causing the kernel to perform an OOB read and an OOB read-modify-write (LOGFILTERSLOTGET/SET) against memory adjacent to the logdynamic section.
The written value is a constrained 3-bit log level slot within the targeted 32-bit word, but the target address is attacker-chosen (a small negative offset from logdynamic) and the write occurs in supervisor mode following a syscall from an unprivileged user thread, providing a kernel memory-corruption / privilege-escalation primitive.
The defect is reachable on any build with CONFIGUSERSPACE=y and CONFIGLOGRUNTIMEFILTERING=y. Present from Zephyr v3.3.0 through v4.4.1. The fix replaces the signed bound check with an unsigned comparison: (uint32t)srcid < logsrccntget(domainid), which correctly rejects negative inputs.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Zephyrto a version that resolves this vulnerability.Fixed in v4.4.1 - Configuration
Update the log_filter_set userspace syscall verifier to replace the signed comparison `src_id < (int16_t)log_src_cnt_get(domain_id)` (where src_id is int16_t) with an unsigned comparison `(uint32_t)src_id < log_src_cnt_get(domain_id)` to correctly reject negative inputs and prevent OOB access.
Zephyr subsys/logging/log_mgmt.c (z_vrfy_log_filter_set verifier) src_id bounds check = Use unsigned comparison: (uint32_t)src_id < log_src_cnt_get(domain_id) instead of signed comparison - Compensating control
If you cannot patch immediately, mitigate exposure by disabling the condition that makes the bug reachable: set CONFIG_USERSPACE=y off and/or disable CONFIG_LOG_RUNTIME_FILTERING=y so the z_vrfy_log_filter_set() syscall verifier path is not reachable.
Event History
Frequently Asked Questions
What is the severity of CVE-2026-10682?
The severity of CVE-2026-10682 is classified as medium with a score of 6.6.
How do I fix CVE-2026-10682?
To fix CVE-2026-10682, update Zephyr to the latest stable version in which this vulnerability is addressed.
What type of vulnerability is CVE-2026-10682?
CVE-2026-10682 is an out-of-bounds write vulnerability in the Zephyr log_filter_set syscall verifier.
Who is affected by CVE-2026-10682?
Users of the Zephyr operating system that utilize the log_filter_set syscall are affected by CVE-2026-10682.
What are the potential impacts of CVE-2026-10682?
CVE-2026-10682 can lead to out-of-bounds writes, which may result in crashes or unintended behavior in the Zephyr system.