Look up another CVE · open CVE-2026-90383 in the interactive tracker
CVE-2026-90383
misc: sgi-gru: remove interrupt-context page-table walks
Published 2026-09-17 (31 days ago) by the Linux kernel CNA. Subsystem drivers/misc. Debian urgency: not yet assigned.
Debian does not build this code. The per-release build detail is under "Where it lives" below.
What to do, per Debian release
Debian's own status for CVE-2026-90383 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | vulnerable | 6.1.190-1 | No fix published anywhere yet, neither in Debian nor upstream for the series bookworm tracks. Watch the Debian tracker page for this CVE. Advisories for bookworm have historically landed a median of 23 days after publication. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
The GRU TLB miss handler walks a process's page tables without holding page-table locks or a reference to the mapped page. It also uses a kernel page-table accessor on user page tables and supports only PMD-level large mappings on x86-64. Remove the direct walker. Send interrupt faults directly to user polling mode so the existing call-OS fallback retries them in process context. Remove the mmap-lock failure statistic that can no longer be incremented.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
drivers/misc/sgi-gru/grufault.c
drivers/misc/sgi-gru/gruprocfs.c
drivers/misc/sgi-gru/grutables.h
- What this is
- SGI GRU DRIVERMAINTAINERS section matched on drivers/misc/sgi-gru/ · Maintained
- Kernel module
- none to look for. The file would have gone into gru, and Debian does not compile it into that module, so finding gru in lsmod would say nothing about this CVE.
Check it on the machine
grep -w CONFIG_SGI_GRU /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
Show whether Debian builds this, per release
Debian does not build this code. In 5 releases below, every kernel flavour Debian publishes has the switch off, so the vulnerable file is compiled into no kernel binary Debian ships.
- bookworm, trixie, forky, sid, bookworm · linux-6.12n
- n
- not enabled on any flavour - this release does not build the code
- Build switch
- CONFIG_SGI_GRU
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-09-17 (31 days ago)source
- CVSS
- 7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.16%, higher than 5.2% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- drivers/misc
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 2.6.27 | 6.12.110 | 877423f595b6 |
| 2.6.27 | 6.18.52 | 6248eb1833ff |
| 2.6.27 | 7.2.6 | ef81e4a1628e |
| 2.6.27 | 7.3 | 928a8e9f523d |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:LAttack vector, local
- The attacker supplies the faulting VA by writing a virtual-mode GRU vload/vstore/bcopy into the mmap'd GSEG on /dev/gru. gru_fault loads the context; the miss is handled by gru_intr (default GRU_OPT_MISS_FMM_INTR) or ioctl GRU_USER_CALL_OS (gru_handle_user_call_os), both of which called atomic_pte_lookup on that missvaddr.
- AC:LAttack complexity, low
- gru_create_new_context defaults to GRU_OPT_MISS_FMM_INTR, so a mapped-mode GRU instruction reliably hits gru_intr, which mmap_read_trylocks gts->ts_mm and runs atomic_pte_lookup. A 1GB hugetlb VMA is mis-walked with no race because pud_leaf is never checked; a second thread of the same process can also madvise/unmap during the unlocked walk.
- PR:LPrivileges required, low
- gru_fops has no .open method and gru_file_mmap/gru_file_unlocked_ioctl do not call capable(). An unprivileged process that can open miscdevice "gru" (/dev/gru) can mmap the GSEG, ioctl GRU_CREATE_CONTEXT, and issue GRU instructions that reach atomic_pte_lookup; only gru_unload_all_contexts requires CAP_SYS_ADMIN.
- UI:NUser interaction, none
- The attacker alone opens /dev/gru, maps the GSEG, calls GRU_CREATE_CONTEXT, and issues the GRU instruction or GRU_USER_CALL_OS ioctl; no other user needs to act.
- S:UScope, unchanged
- atomic_pte_lookup feeds a GPA to tfh_write_restart on the host GRU chiplet. A bad PFN lets GRU DMA into host kernel or other-process memory, which is privilege escalation in the same kernel authority, not a guest-to-host or IOMMU-domain crossing.
- C:HConfidentiality impact, high
- atomic_pte_lookup never tests pud_leaf, so pud_pgtable() on a 1GB hugetlb leaf treats attacker-controlled hugepage bytes as PMD/PTE entries. pte_pfn of that crafted entry is installed by tfh_write_restart, and gru_vload/bcopy then reads that physical page into the attacker-mapped GSEG. The walk also never pins the page, so a stale PFN can be read after reuse.
- I:HIntegrity impact, high
- gru_vstore, gru_bcopy, and AMO opcodes write through the GRU TLB entry programmed by tfh_write_restart. A PFN taken from the pud_leaf miswalk of attacker-controlled 1GB hugepage contents, or from an unpinned PTE reused after free, is therefore an arbitrary physical write.
- A:HAvailability impact, high
- pte_offset_kernel() on a pud_leaf 1GB mapping (or on a PMD that is not a table) computes __va of a non-page-table PFN and dereferences it in gru_intr/atomic_pte_lookup, oopsing the kernel. GRU DMA through a stale unpinned PFN can also panic.