KernelScan.io

HIGH

rxrpc RxGK Token Overflow

CVE-2026-31641

CVSS 7.8 / 10.0 NVD

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

KernelScan AI7.8HIGH

01

In the Linux kernel, the following vulnerability has been resolved: rxrpc: Fix RxGK token loading to check bounds rxrpc_preparse_xdr_yfs_rxgk() reads the raw key length and ticket length from the XDR token as u32 values and passes each through round_up(x, 4) before using the rounded value for validation and allocation. When the raw length is >= 0xfffffffd, round_up() wraps to 0, so the bounds check and kzalloc both use 0 while the subsequent memcpy still copies the original ~4 GiB value, producing a heap buffer overflow reachable from an unprivileged add_key() call. Fix this by: (1) Rejecting raw key lengths above AFSTOKEN_GK_KEY_MAX and raw ticket lengths above AFSTOKEN_GK_TOKEN_MAX before rounding, consistent with the caps that the RxKAD path already enforces via AFSTOKEN_RK_TIX_MAX. (2) Sizing the flexible-array allocation from the validated raw key length via struct_size_t() instead of the rounded value. (3) Caching the raw lengths so that the later field assignments and memcpy calls do not re-read from the token, eliminating a class of TOCTOU re-parse. The control path (valid token with lengths within bounds) is unaffected.

02

Engine v0.2.0

Risk summary

An unprivileged local attacker can trigger a heap buffer overflow by calling add_key() with a specially crafted RxGK token containing length values that cause integer overflow. This could lead to memory corruption, privilege escalation, or system crashes.

Affectednet/rxrpc/key.c

Vulnerability analysis

Root Cause: The rxrpc_preparse_xdr_yfs_rxgk() function reads raw key and ticket lengths from XDR tokens as u32 values and passes them through round_up(x, 4) before validation. When the raw length is >= 0xfffffffd, round_up() wraps to 0 due to integer overflow, causing the bounds check and kzalloc() to use 0 while memcpy() still copies the original ~4GB value.

Attack Surface: This vulnerability is reachable through the add_key() system call without requiring elevated privileges, making it accessible to unprivileged local users. The attack vector involves crafting malicious XDR tokens with carefully chosen length values that trigger the integer overflow condition.

Fix Mechanism: The patch implements three key fixes: (1) validates raw lengths against maximum constants before rounding to prevent overflow, (2) uses struct_size_t() with the validated raw length instead of the rounded value for allocation sizing, and (3) caches raw lengths to prevent TOCTOU attacks where values could be re-read from the token.

03

BranchFixed inPatch commit
6.186.18.233e04596cba8a
6.196.19.1349875b360c2b
mainline7.0d179a868dd75