Second occurrence, 2026-08-31. Two things in the original description need
correcting: this is not a one-off, and it is not specific to the Ubuntu
kernel.
Please add the kernel-bug-exists-upstream tag.
REPRODUCED ON MAINLINE
linux-image-unsigned-7.2.0-070200-generic 7.2.0-070200.202608162350
Linux version 7.2.0-070200-generic (kernel@balboa) ... #202608162350
SMP PREEMPT_DYNAMIC Wed Aug 19 18:42:46 UTC 2026
That is a mainline-builds PPA kernel with no Ubuntu patches applied. Same
board, same iGPU, same boot cmdline as the original report. The defect is in
mainline drm/amdgpu + ttm, not in the Ubuntu delta.
FREQUENCY
Twice in four days, so "Occurred once ... rare and timing-dependent" in the
original description no longer holds:
2026-08-28 09:16:29 kernel 7.0.0-30-generic (original report)
2026-08-31 12:55:21 kernel 7.2.0-070200-generic (this one)
Both were captured by pstore.
THE WHOLE SEQUENCE COLLAPSED INTO 48 ms IN ONE PROCESS
This is the useful part. In the original report the corruption and the fatal
dereference were ten minutes and two processes apart, which made the causal
link circumstantial. This time all three events are the same task,
file-roller PID 316904, inside a single command-submission sequence:
12:55:21.088996 slab kmalloc-part-05-96 start ffff8997c7109840
pointer offset 64 size 96
12:55:21.093258 list_add corruption. prev->next should be next
(ffff8997e240ee30), but was 0000000000000000.
(prev=ffff8997c7109880).
WARNING: lib/list_debug.c:32 at
__list_add_valid_or_report+0x87/0xc0, CPU#5:
file-roller/316904
ttm_resource_move_to_lru_tail.cold+0x8/0x76 [ttm]
ttm_bo_populate+0x85/0xb0 [ttm]
ttm_bo_handle_move_mem+0x1a5/0x1e0 [ttm]
ttm_bo_bounce_temp_buffer+0xa4/0xd0 [ttm]
ttm_bo_validate+0xc0/0x190 [ttm]
amdgpu_cs_bo_validate+0xa1/0x1a0 [amdgpu]
amdgpu_cs_parser_bos.isra.0+0x4ff/0x700 [amdgpu]
amdgpu_cs_ioctl+0x14c/0x360 [amdgpu]
12:55:21.114567 list_del corruption. prev->next should be
ffff8997d152d340, but was ffff8997cda6bdc0.
(prev=ffff8997d1532820)
WARNING: lib/list_debug.c:62 at
__list_del_entry_valid_or_report+0xe4/0x10b, CPU#8:
file-roller/316904
ttm_resource_fini.cold+0xc/0x15 [ttm]
ttm_sys_man_free+0x12/0x30 [ttm]
ttm_resource_free+0xae/0x140 [ttm]
ttm_bo_handle_move_mem+0xe7/0x1e0 [ttm]
ttm_bo_validate+0xc0/0x190 [ttm]
12:55:21.136759 BUG: kernel NULL pointer dereference, address:
0000000000000008
#PF: supervisor write access in kernel mode
Oops: Oops: 0002 [#1] SMP NOPTI
RIP: 0010:ttm_lru_bulk_move_tail+0x1a5/0x360 [ttm]
amdgpu_vm_move_to_lru_tail+0x2b/0x40 [amdgpu]
amdgpu_cs_submit+0x3b8/0x6b0 [amdgpu]
amdgpu_cs_ioctl+0x21b/0x360 [amdgpu]
note: file-roller[316904] exited with irqs disabled
note: file-roller[316904] exited with preempt_count 1
THE OOPS DEREFERENCES EXACTLY THE ADDRESSES NAMED IN THE WARNING
The register state at the oops matches the pointers reported 43 ms earlier,
so this is demonstrably the same list node rather than an inference:
RAX: ffff8997e240ee30 == the "should be next" value from the list_add
report
R09: ffff8997c7109880 == the "prev=" value from the list_add report
RDX: ffff8997c7109840 == the slab object start from the slab line
RSI: 0000000000000000 == the bad prev->next that was reported as NULL
CR2: 0000000000000008
The faulting instruction is 48 89 7e 08, a write to RSI+8, with RSI zero.
Note ffff8997c7109880 = ffff8997c7109840 + 64, i.e. the damaged list_head sits
at offset 64 of a 96-byte kmalloc object, matching "pointer offset 64 size 96"
in the slab line. So the corrupted node and the node the oops walks into are
one and the same allocation. I have not tried to identify which struct that is
and would rather not guess.
For comparison, the 7.0.0-30 oops was at the same RIP offset +0x1a5 with the
same opcode, but RSI was 0x4000 rather than 0. Near-NULL there, plain NULL
here.
DAMAGED FROM THE INSERTION SIDE THIS TIME
The original stage 1 was ttm_lru_bulk_move_del via amdgpu_vm_pt_free, i.e.
page-table teardown. Here it is ttm_resource_move_to_lru_tail from
ttm_bo_populate inside a bounce-buffer move during CS buffer validation, i.e.
the insertion side. The same sublist is damaged from either direction, which
suggests the problem is the sublist's own consistency rather than one
particular caller's teardown ordering.
WHY THE WARNING IS NOT SURVIVABLE
The original description says the kernel "warns but continues". The mechanism
is worth stating explicitly, because it is why stage 1 leads deterministically
to stage 2. This kernel has:
CONFIG_LIST_HARDENED=y
# CONFIG_DEBUG_LIST is not set
so these reports come from list hardening, not from DEBUG_LIST. Under
LIST_HARDENED, __list_add_valid_or_report() returning false causes
__list_add() to bail out without performing the insertion. The warning is
therefore not advisory: the list operation is silently dropped, leaving the
bulk-move sublist half-updated with a NULL link, which the next
ttm_lru_bulk_move_tail() walk then writes through. Because that write happens
under spin_lock, a would-be per-process oops becomes a machine-wide deadlock.
(kmalloc-part-05-96 and kmalloc-rnd-01-192 in the slab lines are
CONFIG_SLAB_BUCKETS=y bucket names, not different structures.)
CASCADE AND RECOVERY
As before, the leaked LRU spinlock took down every subsequent GPU consumer.
Soft lockups began 27 s after the oops and climbed from 26 s to 551 s across
chrome:cs0, gnome-shell, KMS thread, nvtop, claude-desktop and the ttm
delayed-delete workqueue (kworker/u49:12, in ttm_bo_delayed_delete ->
ttm_resource_free). Last log entry 13:05:12, hard reset required.
Third distinct triggering application now: chrome, lact, file-roller. As the
original description argued, the application is incidental.
STILL NOT HARDWARE
Re-verified for this occurrence: no machine-check exceptions, no EDAC errors,
no NVMe errors, no OOM anywhere in the boot. The recurring
"amdgpu ... REG_WAIT timeout ... optc314_disable_crtc" message appears on
every
boot including clean ones and is unrelated.
OFFER
Since this now reproduces every couple of days, I am willing to run a debug
kernel to catch the corrupting write where it happens rather than at the point
of death. Ubuntu ships no KASAN kernel, but CONFIG_SLUB_DEBUG=y is set, so I
can boot with slub_debug=FZP for redzoning and poisoning on the TTM resource
objects. If a KASAN build would be more useful, tell me which config you want
and I will build and run it.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2165729
Title:
faulting task died holding the TTM LRU spinlock (exited with irqs
disabled / preempt_count 1),
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2165729/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs