{"id":13835,"date":"2026-09-04T19:01:00","date_gmt":"2026-09-04T11:01:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-10669"},"modified":"2026-09-04T19:01:00","modified_gmt":"2026-09-04T11:01:00","slug":"cve-2026-10669","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-10669","title":{"rendered":"CVE-2026-10669 [HIGH] &#8211; On Xtensa SoCs built with CONFIG_XTENSA_MPU and CONFIG_USERSPACE, arch_buffer_validate() i"},"content":{"rendered":"<p>On Xtensa SoCs built with CONFIG_XTENSA_MPU and CONFIG_USERSPACE, arch_buffer_validate() in arch\/xtensa\/core\/mpu.c \u2014 the architecture hook that verifies a user-mode-supplied buffer is accessible to the calling user thread with the requested permission \u2014 defaulted its return value to 0 (access permitted) and only set a denial result inside its per-MPU-region probe loop. When the rounded extent of the buffer wraps the 32-bit address space (size + alignment offset near SIZE_MAX, or ROUND_UP(size + offset) overflowing to 0), the loop executes zero iterations and the function returns 0 = permitted without probing any MPU region.<\/p>\n<p>The syscall-layer pre-checks (K_SYSCALL_MEMORY_SIZE_CHECK \/ Z_DETECT_POINTER_OVERFLOW) only catch a raw addr+size wrap and do not cover the ROUND_UP-induced wrap, and the string path (arch_user_string_nlen -&gt; arch_buffer_validate) has no syscall-layer guard at all.<\/p>\n<p>An unprivileged user-mode thread can therefore pass a crafted (addr, size) to any syscall that validates user buffers via k_usermode_from_copy\/to_copy or k_usermode_string_copy and have validation succeed for memory it must not access; the kernel then reads from (disclosure) or, with write=1, writes to (corruption) attacker-chosen kernel or other-partition memory on the thread&#8217;s behalf, enabling information disclosure, memory corruption, privilege escalation, and denial of service.<\/p>\n<p>Affected from v3.7.0 (when Xtensa MPU userspace support was added) through v4.4.0. The fix changes the default to -EINVAL (deny by default), adds an explicit size_add_overflow check, and sets the success value only after the full range has been validated.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On Xtensa SoCs built with CONFIG_XTENSA_MPU and CONFIG_USERSPACE, arch_buffer_validate() in arch\/xtensa\/core\/mpu.c \u2014 the architecture hook that verifies a user-mode-supplied buffer is accessible to th<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-13835","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/13835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}