CVE-2026-97496 in Linux
摘要
由 VulDB • 2026-09-24
在 Linux 内核中,已修复以下漏洞:
drm/amdkfd: 修复 get_wave_state() 中的越界内存泄露问题
v9 的 `get_wave_state()` 函数直接信任从 MQD(Memory Queue Descriptor)读取的 `cp_hqd_cntl_stack_size` 和 `cp_hqd_cntl_stack_offset` 值,这些值由 GPU 微码写入。在 CRIU(Checkpoint/Restore In Userspace)恢复路径上(通过带有 H3 标志位的 AMDKFD_IOC_RESTORE_PROCESS),这些值完全受攻击者控制。
这会导致无界的 `copy_to_user()` 操作,从而泄露相邻的 GTT/kernel 内存。如果 offset > size,整数下溢会产生约 4 GiB 的读取长度;如果将 size 设置为 1 MiB(而分配仅为 4 KiB),则会泄露 1 MiB 的相邻内核内存(包括其他队列的 MQD、环形缓冲区以及 KASLR 指针)。
修复方法是将 `cp_hqd_cntl_stack_size` 限制为实际分配的缓冲区大小(q->ctl_stack_size),并将 `cp_hqd_cntl_stack_offset` 限制为该受限后的值,然后再执行算术运算和 `copy_to_user()`。
这确保了无论攻击者提供的 MQD 字段值如何,我们都不会读取超出已分配内核 BO(Buffer Object)范围的数据。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.