CVE-2026-31507
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: net/smc: tee() splice boru buferini dublikat etdikdə smc_spd_priv-nin iki dəfə azad edilməsi (double-free) problemi düzəldildi smc_rx_splice() hər pipe_buffer üçün bir smc_spd_priv ayırır və göstəricini pipe_buffer.private-da saxlayır. Bu buferlər üçün istifadə olunan pipe_buf_operations funksiyasının .get = generic_pipe_buf_get hissəsi, yalnız tee(2) boru buferini dublikat etdikdə səhifə istinad sayını artırırdı. smc_spd_priv göstəricisinin özü idarə olunmadığı üçün tee()-dən sonra həm orijinal, həm də klonlanmış pipe_buffer eyni smc_spd_priv *-i paylaşır. Hər iki boru sonradan azad edildikdə, smc_rx_pipe_buf_release() eyni obyekt üzərində iki dəfə çağırılır: 1-ci çağırış: kfree(priv) sock_put(sk) smc_rx_update_cons() [doğrudur] 2-ci çağırış: kfree(priv) sock_put(sk) smc_rx_update_cons() [UAF] KASAN, smc_rx_pipe_buf_release()-də slab-use-after-free xətasını bildirir ki, bu da daha sonra smc_rx_update_consumer() vasitəsilə azad edilmiş priv->smc göstəricisini izləyərkən NULL-göstərici referansına (NULL-pointer dereference) və kernel panic-ə səbəb olur: BUG: KASAN: slab-use-after-free in smc_rx_pipe_buf_release+0x78/0x2a0 Read of size 8 at addr ffff888004a45740 by task smc_splice_tee_/74 Call Trace: <TASK> dump_stack_lvl+0x53/0x70 print_report+0xce/0x650 kasan_report+0xc6/0x100 smc_rx_pipe_buf_release+0x78/0x2a0 free_pipe_info+0xd4/0x130 pipe_release+0x142/0x160 __fput+0x1c6/0x490 __x64_sys_close+0x4f/0x90 do_syscall_64+0xa6/0x1a0 entry_SYSCALL_64_after_hwframe+0x77/0x7f </TASK> BUG: kernel NULL pointer dereference, address: 0000000000000020 RIP: 0010:smc_rx_update_consumer+0x8d/0x350 Call Trace: <TASK> smc_rx_pipe_buf_release+0x121/0x2a0 free_pipe_info+0xd4/0x130 pipe_release+0x142/0x160 __fput+0x1c6/0x490 __x64_sys_close+0x4f/0x90 do_syscall_64+0xa6/0x1a0 entry_SYSCALL_64_after_hwframe+0x77/0x7f </TASK> Kernel panic - not syncing: Fatal exception Yaddaş təhlükəsizliyi probleminin əlavəsində, SMC splice buferinin dublikatının yaradılması semantik cəhətdən şübhəlidir: smc_rx_update_cons() eyni məlumat üçün istehlakçı kursorunu iki dəfə irəli çəkərdi və bu da qəbul pəncərəsinin uçotunu korlayardı. smc_spd_priv üzərindəki refcount iki dəfə azad edilməni düzəldə bilərdi, lakin kursor uçotu problemi hələ də ayrıca həll olunmalı idi. .get geri çağırma funksiyası həm tee(2), həm də qismən transferlər üçün splice_pipe_to_pipe() tərəfindən çağırılır; indi hər ikisi -EFAULT qaytaracaq. SMC soket məlumatlarını dublikat etmək istəyən istifadəçilər kopya əsaslı oxuma yolundan istifadə etməlidirlər.
Necə düzəltmək olar
- linux linux_kernel5.10.253, 5.15.203, 6.1.168, 6.6.131, 6.12.80, 6.18.21, 6.19.11 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 | 4.18.1 ≤ v < 5.10.253, 5.11 ≤ v < 5.15.203, 5.16 ≤ v < 6.1.168, 6.2 ≤ v < 6.6.131, 6.7 ≤ v < 6.12.80, 6.13 ≤ v < 6.18.21, 6.19 ≤ v < 6.19.11, 4.18, 7.0 | 5.10.253, 5.15.203, 6.1.168, 6.6.131, 6.12.80, 6.18.21, 6.19.11 |
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.