KernelScan.io

HIGH

crypto acomp Pointer Corruption

CVE-2026-46081

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.3HIGH

01

In the Linux kernel, the following vulnerability has been resolved: crypto: acomp - fix wrong pointer stored by acomp_save_req() acomp_save_req() stores &req->chain in req->base.data. When acomp_reqchain_done() is invoked on asynchronous completion, it receives &req->chain as the data argument but casts it directly to struct acomp_req. Since data points to the chain member, all subsequent field accesses are at a wrong offset, resulting in memory corruption. The issue occurs when an asynchronous hardware implementation, such as the QAT driver, completes a request that uses the DMA virtual address interface (e.g. acomp_request_set_src_dma()). This combination causes crypto_acomp_compress() to enter the acomp_do_req_chain() path, which sets acomp_reqchain_done() as the completion callback via acomp_save_req(). With KASAN enabled, this manifests as a general protection fault in acomp_reqchain_done(): general protection fault, probably for non-canonical address 0xe000040000000000 KASAN: probably user-memory-access in range [0x0000400000000000-0x0000400000000007] RIP: 0010:acomp_reqchain_done+0x15b/0x4e0 Call Trace: <IRQ> qat_comp_alg_callback+0x5d/0xa0 [intel_qat] adf_ring_response_handler+0x376/0x8b0 [intel_qat] adf_response_handler+0x60/0x170 [intel_qat] tasklet_action_common+0x223/0x820 handle_softirqs+0x1ab/0x640 </IRQ> Fix this by storing the request itself in req->base.data instead of &req->chain, so that acomp_reqchain_done() receives the correct pointer. Simplify acomp_restore_req() accordingly to access req->chain directly.

02

Engine v0.2.0

Risk summary

Local users with low privileges can trigger memory corruption in the kernel's asynchronous compression subsystem when using hardware acceleration such as Intel QAT. The bug causes memory corruption at incorrect offsets and, because the completion runs in softirq context, leads to kernel panic. Limited information disclosure of kernel pointer values is possible from the corrupted request structure, but arbitrary read is not enabled.

Affectedcrypto/acompress.c (crypto subsystem)

Vulnerability analysis

The root cause is in acomp_save_req() which incorrectly stores &req->chain instead of req itself in req->base.data. When the asynchronous completion callback acomp_reqchain_done() executes, it receives &req->chain but casts it directly to struct acomp_req. Since data points to the chain member, all subsequent field accesses are at a wrong offset, resulting in memory corruption. The issue manifests when an asynchronous hardware implementation, such as the QAT driver, completes a request that uses the DMA virtual address interface (e.g. acomp_request_set_src_dma()). This combination causes crypto_acomp_compress() to enter the acomp_do_req_chain() path, which sets acomp_reqchain_done() as the completion callback via acomp_save_req(). With KASAN enabled, this manifests as a general protection fault in acomp_reqchain_done() because the callback runs in softirq/tasklet context. The fix stores the correct request pointer in req->base.data and simplifies acomp_restore_req() to access req->chain directly.

03

BranchFixed inPatch commit
6.186.18.27343a5bf68a8f
7.07.0.41a2785e59856
mainline7.1-rc1d7e20b9bd6c9