CVE-2026-74504 in Linux
الملخص
بحسب VulDB • 16/08/2026
في نواة لينكس، تم حل الثغرة التالية:
ALSA: seq: إصلاح القسمة على صفر في initialize_timer()
يتيح مؤقت ALSA المدفوع من مساحة المستخدم (SND_UTIMER) لمستخدم غير ممتيز تعيين دقة العتاد الخاصة بـ snd_timer الخلفية إلى قيمة عشوائية مكونة من 64 بت عبر SNDRV_TIMER_IOCTL_CREATE. تقوم الدالة snd_utimer_create() برفض القيمة صفر فقط.
عند ربط مثل هذا المؤقت بقائمة تسلسل (sequencer queue)، تحسب initialize_timer() فترة النبضة (tick period) على النحو التالي:
tmr->ticks = 1000000000 / (r * freq);
حيث تمثل r دقة التحكم فيها من قبل المستخدم، وfreq هو معدل تحديث قائمة التسلسل بالهرتز، والمقيد بين MIN_FREQUENCY..MAX_FREQUENCY (10..6250). تؤدي الدقة بقيمة 2^63 إلى تجاوز ناتج 64 بت لـ r * freq ليصبح صفراً لأي تردد زوجي، بما في ذلك DEFAULT_FREQUENCY (1000)، مما يتسبب في حدوث خطأ قسمة على صفر.
تعمل عملية القسمة تحت حماية tmr->lock مع تعطيل المقاطعات، لذا يترك الخطأ (oops) قفل اللف (spinlock) مشدوداً ويعطل المعالج المركزي (CPU). يمكن الوصول إليها من قبل مستخدم غير ممتيز لديه حق الوصول إلى /dev/snd/timer و/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
ارفض الناتج المتجاوز (overflowing) باستخدام check_mul_overflow() وارجع إلى نبضة واحدة، مما يتجنب أيضاً تغذية قسمة متجاوزة ولكن غير صفرية (على سبيل المثال 2^63 * 1000 mod 2^64 == 0، أو دقات أخرى تتجاوز لتصبح قيمة صغيرة) في حساب الفترة.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.