CVE-2022-49441
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: tty: tty_port->lock altında printk() çağrılmasından kaynaklanan deadlock düzeltildi pty_write() fonksiyonu, hata mesajını yazdırmak için normal bir printk() çağırabilen kmalloc()'u tetikler. Bu durum, aşağıda syz-bot tarafından raporlanan senaryoda bir deadlock'a neden olabilir: CPU0 CPU1 CPU2 ---- ---- ---- lock(console_owner); lock(&port_lock_key); lock(&port->lock); lock(&port_lock_key); lock(&port->lock); lock(console_owner); dbdda842fe96 ("printk: Add console owner and waiter logic to load balance console writes") numaralı commit'te belirtildiği üzere, bu tür bir deadlock, (port->lock tarafından korunan bölümde çağrılan) kmalloc() içerisinde printk_deferred() kullanılarak önlenebilir. Ancak kmalloc() yolunda çok fazla printk() bulunmaktadır ve kmalloc() herhangi bir yerden çağrılabileceği için printk()'yı printk_deferred() ile değiştirmek çok karmaşık ve uygunsuz olacaktır. Bu nedenle, bu yama kmalloc() için __GFP_NOWARN belirtecini seçerek printk()'nın çağrılmamasını sağlar ve böylece bu deadlock sorunu önlenmiş olur. Syzbot şu lockdep hatasını raporlamıştır: ====================================================== WARNING: possible circular locking dependency detected 5.4.143-00237-g08ccc19a-dirty #10 Not tainted ------------------------------------------------------ syz-executor.4/29420 şu kilidi almaya çalışıyor: ffffffff8aedb2a0 (console_owner){....}-{0:0}, şurada: console_trylock_spinning kernel/printk/printk.c:1752 [inline] ffffffff8aedb2a0 (console_owner){....}-{0:0}, şurada: vprintk_emit+0x2ca/0x470 kernel/printk/printk.c:2023 ancak görev zaten şu kilidi tutuyor: ffff8880119c9158 (&port->lock){-.-.}-{2:2}, şurada: pty_write+0xf4/0x1f0 drivers/tty/pty.c:120 bu kilit halihazırda yeni kilide bağımlıdır. mevcut bağımlılık zinciri (ters sırada) şöyledir: -> #2 (&port->lock){-.-.}-{2:2}: __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] _raw_spin_lock_irqsave+0x35/0x50 kernel/locking/spinlock.c:159 tty_port_tty_get drivers/tty/tty_port.c:288 [inline] <-- lock(&port->lock); tty_port_default_wakeup+0x1d/0xb0 drivers/tty/tty_port.c:47 serial8250_tx_chars+0x530/0xa80 drivers/tty/serial/8250/8250_port.c:1767 serial8250_handle_irq.part.0+0x31f/0x3d0 drivers/tty/serial/8250/8250_port.c:1854 serial8250_handle_irq drivers/tty/serial/8250/8250_port.c:1827 [inline] <-- lock(&port_lock_key); serial8250_default_handle_irq+0xb2/0x220 drivers/tty/serial/8250/8250_port.c:1870 serial8250_interrupt+0xfd/0x200 drivers/tty/serial/8250/8250_core.c:126 __handle_irq_event_percpu+0x109/0xa50 kernel/irq/handle.c:156 [...] -> #1 (&port_lock_key){-.-.}-{2:2}: __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] _raw_spin_lock_irqsave+0x35/0x50 kernel/locking/spinlock.c:159 serial8250_console_write+0x184/0xa40 drivers/tty/serial/8250/8250_port.c:3198 <-- lock(&port_lock_key); call_console_drivers kernel/printk/printk.c:1819 [inline] console_unlock+0x8cb/0xd00 kernel/printk/printk.c:2504 vprintk_emit+0x1b5/0x470 kernel/printk/printk.c:2024 <-- lock(console_owner); vprintk_func+0x8d/0x250 kernel/printk/printk_safe.c:394 printk+0xba/0xed kernel/printk/printk.c:2084 register_console+0x8b3/0xc10 kernel/printk/printk.c:2829 univ8250_console_init+0x3a/0x46 drivers/tty/serial/8250/8250_core.c:681 console_init+0x49d/0x6d3 kernel/printk/printk.c:2915 start_kernel+0x5e9/0x879 init/main.c:713 secondary_startup_64+0xa4/0xb0 arch/x86/kernel/head_64.S:241 -> #0 (console_owner){....}-{0:0}: [...] lock_acquire+0x127/0x340 kernel/locking/lockdep.c:4734 console_trylock_spinning kernel/printk/printk.c:1773 ---kesildi---
Nasıl düzeltilir
- linux linux_kernel3.19, 4.5, 4.9.318, 4.14.283, 4.19.247, 5.4.198, 5.10.121, 5.15.46, 5.17.14, 5.18.3 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.18.118 ≤ v < 3.19, 4.4.146 ≤ v < 4.5, 4.9.117 ≤ v < 4.9.318, 4.14.60 ≤ v < 4.14.283, 4.17.12 ≤ v < 4.19.247, 4.20 ≤ v < 5.4.198, 5.5 ≤ v < 5.10.121, 5.11 ≤ v < 5.15.46, 5.16 ≤ v < 5.17.14, 5.18 ≤ v < 5.18.3 | 3.19, 4.5, 4.9.318, 4.14.283, 4.19.247, 5.4.198, 5.10.121, 5.15.46, 5.17.14, 5.18.3 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.