CVE-2026-74504 in Linux
Tóm tắt
Bởi VulDB • 15/08/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ALSA: seq: Sửa lỗi chia cho không trong initialize_timer()
Bộ định thời ALSA do người dùng điều khiển (SND_UTIMER) cho phép một người dùng chưa có đặc quyền đặt độ phân giải phần cứng của bộ định thời nền snd_timer thành giá trị 64-bit tùy ý thông qua SNDRV_TIMER_IOCTL_CREATE. Hàm snd_utimer_create() chỉ từ chối giá trị bằng không.
Khi bộ định thời như vậy được liên kết với hàng đợi sequencer, initialize_timer() tính chu kỳ tick theo công thức:
tmr->ticks = 1000000000 / (r * freq);
trong đó r là độ phân giải do người dùng kiểm soát và freq là tốc độ cập nhật của sequencer tính bằng Hz, bị giới hạn trong khoảng MIN_FREQUENCY..MAX_FREQUENCY (10..6250). Một giá trị độ phân giải 2^63 khiến tích số 64-bit r * freq tràn về không đối với bất kỳ tần số chẵn nào, bao gồm DEFAULT_FREQUENCY (1000), do đó phép chia gây lỗi chia cho không.
Phép chia này được thực hiện dưới khóa tmr->lock với ngắt bị vô hiệu hóa, nên sự cố oops khiến spinlock vẫn giữ và làm treo CPU. Lỗ hổng có thể truy cập bởi người dùng chưa đặc quyền có quyền truy cập vào /dev/snd/timer và /dev/snd/seq.
Oops: divide error: 0000 [#1] SMP KASAN PTI
CPU: 7 UID: 1000 PID: 456 Comm: alsa_seq_utimer Not tainted 7.2.0-rc4+ RIP: 0010:initialize_timer.constprop.0+0x20a/0x2d0 snd_seq_timer_start+0x15e/0x2b0 snd_seq_control_queue+0x56f/0xba0 snd_seq_write+0x3e0/0x730
Từ chối tích số bị tràn bằng cách sử dụng check_mul_overflow() và chuyển sang chế độ tick đơn, điều này cũng tránh việc đưa vào phép tính chu kỳ một bộ chia đã bị tràn nhưng khác không (ví dụ: 2^63 * 1000 mod 2^64 == 0, hoặc các giá trị độ phân giải khác bị tràn về giá trị nhỏ) trong quá trình tính toán chu kỳ.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.