CVE-2026-31707 json
ksmbd: validate response sizes in ipc_validate_msg()
published 2026-05-01 6 mo ago modified 2026-10-30 9 d ago also EUVD-2026-26516
- cvss
- 7.1
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.1%
- EPSS 0.1% chance of exploitation in 30 days, percentile 2%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: validate response sizes in ipc_validate_msg()
ipc_validate_msg() computes the expected message size for each response type by adding (or multiplying) attacker-controlled fields from the daemon response to a fixed struct size in unsigned int arithmetic. Three cases can overflow:
KSMBD_EVENT_RPC_REQUEST: msg_sz = sizeof(struct ksmbd_rpc_command) + resp->payload_sz; KSMBD_EVENT_SHARE_CONFIG_REQUEST: msg_sz = sizeof(struct ksmbd_share_config_response) + resp->payload_sz; KSMBD_EVENT_LOGIN_REQUEST_EXT: msg_sz = sizeof(struct ksmbd_login_response_ext) + resp->ngroups * sizeof(gid_t);
resp->payload_sz is __u32 and resp->ngroups is __s32. Each addition can wrap in unsigned int; the multiplication by sizeof(gid_t) mixes signed and size_t, so a negative ngroups is converted to SIZE_MAX before the multiply. A wrapped value of msg_sz that happens to equal entry->msg_sz bypasses the size check on the next line, and downstream consumers (smb2pdu.c:6742 memcpy using rpc_resp->payload_sz, kmemdup in ksmbd_alloc_user using resp_ext->ngroups) then trust the unverified length.
Use check_add_overflow() on the RPC_REQUEST and SHARE_CONFIG_REQUEST paths to detect integer overflow without constraining functional payload size; userspace ksmbd-tools grows NDR responses in 4096-byte chunks for calls like NetShareEnumAll, so a hard transport cap is unworkable on the response side. For LOGIN_REQUEST_EXT, reject resp->ngroups outside the signed [0, NGROUPS_MAX] range up front and report the error from ipc_validate_msg() so it fires at the IPC boundary; with that bound the subsequent multiplication and addition stay well below UINT_MAX. The now-redundant ngroups check and pr_err in ksmbd_alloc_user() are removed.
This is the response-side analogue of aab98e2dbd64 ("ksmbd: fix integer overflows on 32 bit systems"), which hardened the request side.
Patch / fix
- Linux Linux 6.1.191, 6.6.141, 6.12.84, 6.18.25, 7.0.2, 7.1
- linux Debian 13 6.12.85-1
- linux Debian 14 7.0.3-1
debian advisories DEBIAN-CVE-2026-31707
- linux Ubuntu 24.04 LTS 6.8.0-136.136
- linux Ubuntu 26.04 LTS 7.0.0-27.27
- linux-aws Ubuntu 24.04 LTS 6.8.0-1061.64
- linux-aws Ubuntu 26.04 LTS 7.0.0-1008.8
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1064.72
- linux-gcp Ubuntu 26.04 LTS 7.0.0-1007.7
- linux-gke Ubuntu 24.04 LTS 6.8.0-1059.67
- linux-ibm Ubuntu 24.04 LTS 6.8.0-1061.62
ubuntu advisories UBUNTU-CVE-2026-31707
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-source openSUSE Tumbleweed 7.0.7-1.1
opensuse advisories openSUSE-SU-2026:10793-1
- git.kernel.org/stable/c/52518503a1a00bc33e9522c4eb05df023e3ae978 commit
- git.kernel.org/stable/c/bf396208418371174869baba9434535cd3288e80 commit
- git.kernel.org/stable/c/7dd0c858e1909769a4c91842724315ee74f1a5f1 commit
- git.kernel.org/stable/c/299db777ea0cfa5c407e41b045c24a14c034c27b commit
- git.kernel.org/stable/c/99c631d0366c1eab8fb188fe66425f4581ebdde4 commit
- git.kernel.org/stable/c/d6a6aa81eac2c9bff66dc6e191179cb69a14426b commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-31707 updated
kernel: ksmbd: validate response sizes in ipc_validate_msg()
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelnot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
Exploit prediction
0.13% chance of exploitation in the next 30 days, higher than 2% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.1 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H |
Affected products
- Linux Linux
Classification
- Weakness
-
- CWE-787 Out-of-bounds Write
- Technology feeds
References
- git.kernel.org /stable/c/52518503a1a00bc33e9522c4eb05df023e3ae978
- git.kernel.org /stable/c/bf396208418371174869baba9434535cd3288e80
-
git.kernel.org
/stable/c/7dd0c858e1909769a4c91842724315ee74f1a5f1
patch
-
git.kernel.org
/stable/c/299db777ea0cfa5c407e41b045c24a14c034c27b
patch
-
git.kernel.org
/stable/c/99c631d0366c1eab8fb188fe66425f4581ebdde4
patch
-
git.kernel.org
/stable/c/d6a6aa81eac2c9bff66dc6e191179cb69a14426b
patch
Sources
- CVE List CVE-2026-31707
- NVD CVE-2026-31707
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.