KernelScan.io

CRITICAL

ksmbd EA Alignment OOB

CVE-2026-31705

CVSS 9.8 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

KernelScan AI9.8CRITICAL

01

In the Linux kernel, the following vulnerability has been resolved: ksmbd: fix out-of-bounds write in smb2_get_ea() EA alignment smb2_get_ea() applies 4-byte alignment padding via memset() after writing each EA entry. The bounds check on buf_free_len is performed before the value memcpy, but the alignment memset fires unconditionally afterward with no check on remaining space. When the EA value exactly fills the remaining buffer (buf_free_len == 0 after value subtraction), the alignment memset writes 1-3 NUL bytes past the buf_free_len boundary. In compound requests where the response buffer is shared across commands, the first command (e.g., READ) can consume most of the buffer, leaving a tight remainder for the QUERY_INFO EA response. The alignment memset then overwrites past the physical kvmalloc allocation into adjacent kernel heap memory. Add a bounds check before the alignment memset to ensure buf_free_len can accommodate the padding bytes. This is the same bug pattern fixed by commit beef2634f81f ("ksmbd: fix potencial OOB in get_file_all_info() for compound requests") and commit fda9522ed6af ("ksmbd: fix OOB write in QUERY_INFO for compound requests"), both of which added bounds checks before unconditional writes in QUERY_INFO response handlers.

02

Engine v0.2.0

Risk summary

An attacker can trigger out-of-bounds heap writes by sending specially crafted SMB2 compound requests with QUERY_INFO EA operations. This can corrupt adjacent kernel memory, potentially leading to privilege escalation, denial of service, or arbitrary code execution. The vulnerability affects the ksmbd SMB server and is reachable over the network without authentication in many configurations.

Affectedfs/smb/server/smb2pdu.c

Vulnerability analysis

Root Cause: The smb2_get_ea() function performs a bounds check on buf_free_len before copying EA values, but unconditionally applies 4-byte alignment padding via memset() afterward without checking if sufficient buffer space remains. When an EA value exactly fills the remaining buffer (buf_free_len == 0 after value subtraction), the alignment memset writes 1-3 NUL bytes past the buffer boundary into adjacent kernel heap memory.

Attack Surface: This vulnerability is exploitable through SMB2 QUERY_INFO requests with Extended Attributes (EA) queries. The issue is particularly exploitable in compound SMB requests where multiple commands share a response buffer, allowing an attacker to craft requests that consume most of the buffer space in earlier commands, leaving insufficient space for the EA alignment padding in subsequent commands.

Fix Mechanism: The patch adds a bounds check before the alignment memset operation to ensure buf_free_len can accommodate the padding bytes. If insufficient space remains, the loop breaks instead of performing the out-of-bounds write.

03

BranchFixed inPatch commit
5.165.16ffbce350c6fd
6.16.1.175ddbbc8b2a09d
6.126.12.84790304c02bf9
6.186.18.25922d48fe8c19
6.66.6.13698f3de6ef4ef
7.07.0.230010c952077
mainline7.1-rc1