KernelScan.io

HIGH Introduced in 6.18

rocket JobPush Overflow

CVE-2026-89592

CVSS 7.8 / 10.0 KernelScan AI

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

01

In the Linux kernel, the following vulnerability has been resolved: accel/rocket: fix NULL dereference and integer overflow in rocket_job_push() rocket_job_push() allocates a temporary array to hold all input and output GEM object pointers: bos = kvmalloc_array(job->in_bo_count + job->out_bo_count, sizeof(void *), GFP_KERNEL); memcpy(bos, job->in_bos, job->in_bo_count * sizeof(void *)); memcpy(&bos[job->in_bo_count], job->out_bos, ...); Two bugs exist: 1. Missing NULL check: if kvmalloc_array() fails, bos is NULL and the subsequent memcpy() dereferences it, causing a kernel NULL pointer dereference. 2. Integer overflow: in_bo_count and out_bo_count are both u32, set directly from userspace-supplied in_bo_handle_count and out_bo_handle_count with no prior validation. Their sum is computed in u32 arithmetic and can wrap to a smaller value, causing the allocation count passed to kvmalloc_array() to be smaller than intended. Subsequent uses still operate on the original counts when copying and locking objects, which may lead to out-of-bounds accesses on the temporary array. Fix by using check_add_overflow() to detect count overflow before the allocation, and adding a NULL check on the allocation result.

02

Engine v0.6.0

Risk summary

A local user with access to the rocket NPU accelerator device node can trigger an integer overflow in the job submission path, causing an undersized heap allocation and a subsequent out-of-bounds write with attacker-controlled data. This can lead to kernel memory corruption, potentially enabling privilege escalation or a system crash. The bug also includes a missing NULL check on allocation failure, resulting in a kernel panic.

Affecteddrivers/accel/rocket/rocket_job.c (rocket NPU accelerator driver)

Vulnerability analysis

The rocket NPU accelerator driver's job submission path accepts user-supplied counts for input and output buffer objects without validating that their sum fits within the allocated array size. When the two 32-bit counts are added, the sum can wrap around, causing a much smaller temporary buffer to be allocated. The driver then copies buffer object pointers into this undersized buffer using the original large counts, writing past the end of the allocation. Additionally, a failed allocation is not checked, leading to a NULL pointer dereference. The fix validates the sum using an overflow-safe helper before allocating, checks for allocation failure, and uses the validated count for all subsequent operations. The vulnerable code is reachable from any local process that can open the rocket accelerator device node, which on many systems is accessible to unprivileged users or members of the render group.

03

BranchIntroducedFixed inPatch commit
6.186.186.18.50c1a5bf1b6e1d
7.26.187.2.4dfff90a6eb22
mainline6.187.3a85402bff218