CVE-2025-38378
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: HID: appletb-kbd: appletb_kbd_probe funksiyasında slab use-after-free xətasının düzəldilməsi appletb_kbd_probe() yoxlama prosesində, toxunma paneli klaviaturası ilə bağlı məlumatları saxlamaq üçün devm_kzalloc() vasitəsilə "struct appletb_kbd *kbd" ayrılır. Daha sonra, əgər backlight_device_get_by_name() funksiyası "appletb_backlight" adlı arxa işıqlandırma cihazı tapsa, appletb_inactivity_timer() ilə taymer (kbd->inactivity_timer) qurulur və taymer appletb_tb_dim_timeout (60) saniyədən sonra işləyəcək şəkildə aktivləşdirilir. Taymer aktivləşdirildikdən sonra xəta baş verdikdə use-after-free vəziyyəti yaranır. Bu, sonda yoxlamanın uğursuz olduğu və nəticədə cihaz tərəfindən idarə olunan yaddaş olan "struct appletb_kbd *kbd" strukturunun azad edildiyi anlamına gəlir. 60 saniyə sonra taymerin vaxtı bitəcək və __run_timers taymerə (kbd->inactivity_timer) daxil olmağa çalışacaq, lakin kdb strukturu artıq azad edildiyi üçün use-after-free xətası baş verəcək. [ 71.636938] ================================================================== [ 71.637915] BUG: KASAN: slab-use-after-free in __run_timers+0x7ad/0x890 [ 71.637915] Write of size 8 at addr ffff8881178c5958 by task swapper/1/0 [ 71.637915] [ 71.637915] CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted 6.16.0-rc2-00318-g739a6c93cc75-dirty #12 PREEMPT(voluntary) [ 71.637915] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 [ 71.637915] Call Trace: [ 71.637915] <IRQ> [ 71.637915] dump_stack_lvl+0x53/0x70 [ 71.637915] print_report+0xce/0x670 [ 71.637915] ? __run_timers+0x7ad/0x890 [ 71.637915] kasan_report+0xce/0x100 [ 71.637915] ? __run_timers+0x7ad/0x890 [ 71.637915] __run_timers+0x7ad/0x890 [ 71.637915] ? __pfx___run_timers+0x10/0x10 [ 71.637915] ? update_process_times+0xfc/0x190 [ 71.637915] ? __pfx_update_process_times+0x10/0x10 [ 71.637915] ? _raw_spin_lock_irq+0x80/0xe0 [ 71.637915] ? _raw_spin_lock_irq+0x80/0xe0 [ 71.637915] ? __pfx__raw_spin_lock_irq+0x10/0x10 [ 71.637915] run_timer_softirq+0x141/0x240 [ 71.637915] ? __pfx_run_timer_softirq+0x10/0x10 [ 71.637915] ? __pfx___hrtimer_run_queues+0x10/0x10 [ 71.637915] ? kvm_clock_get_cycles+0x18/0x30 [ 71.637915] ? ktime_get+0x60/0x140 [ 71.637915] handle_softirqs+0x1b8/0x5c0 [ 71.637915] ? __pfx_handle_softirqs+0x10/0x10 [ 71.637915] irq_exit_rcu+0xaf/0xe0 [ 71.637915] sysvec_apic_timer_interrupt+0x6c/0x80 [ 71.637915] </IRQ> [ 71.637915] [ 71.637915] Allocated by task 39: [ 71.637915] kasan_save_stack+0x33/0x60 [ 71.637915] kasan_save_track+0x14/0x30 [ 71.637915] __kasan_kmalloc+0x8f/0xa0 [ 71.637915] __kmalloc_node_track_caller_noprof+0x195/0x420 [ 71.637915] devm_kmalloc+0x74/0x1e0 [ 71.637915] appletb_kbd_probe+0x37/0x3c0 [ 71.637915] hid_device_probe+0x2d1/0x680 [ 71.637915] really_probe+0x1c3/0x690 [ 71.637915] __driver_probe_device+0x247/0x300 [ 71.637915] driver_probe_device+0x49/0x210 [...] [ 71.637915] [ 71.637915] Freed by task 39: [ 71.637915] kasan_save_stack+0x33/0x60 [ 71.637915] kasan_save_track+0x14/0x30 [ 71.637915] kasan_save_free_info+0x3b/0x60 [ 71.637915] __kasan_slab_free+0x37/0x50 [ 71.637915] kfree+0xcf/0x360 [ 71.637915] devres_release_group+0x1f8/0x3c0 [ 71.637915] hid_device_probe+0x315/0x680 [ 71.637915] really_probe+0x1c3/0x690 [ 71.637915] __driver_probe_device+0x247/0x300 [ 71.637915] driver_probe_device+0x49/0x210 [...] Problemin kök səbəbi odur ki, xəta yollarında taymer deaktiv edilmir, bu da onun aktiv qalmasına və azad edilmiş yaddaşa müraciət etməsinə səbəb olur. Bunu düzəltmək üçün taymeri deaktiv etmək məqsədilə timer_delete_sync() çağırılmalıdır. Digər kiçik problem isə appletb_kbd_remove() funksiyasında timer_delete_sync funksiyasının şərtsiz çağırılmasıdır; bunu timer_delete_sync çağırmazdan əvvəl etibarlı kbd->backlight_dev yoxlanışı əlavə etməklə düzəldin.
Necə düzəltmək olar
- linux linux_kernel6.15.6 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.15 ≤ v < 6.15.6, 6.16 | 6.15.6 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.