CVE-2026-46052
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: ceph: negatif dentry'ler yalnızca unhashed olduklarında d_add() işlemine tabi tutulur Ceph, birincil dcache hash yapısında halihazırda mevcut olan negatif bir dentry üzerinde d_add(dentry, NULL) fonksiyonunu çağırabilir. Mevcut VFS'de bu durum güvenli değildir. d_add(), __d_add() üzerinden __d_rehash() fonksiyonuna gider ve dentry->d_hash değerini koşulsuz olarak hlist_bl kovasına yeniden ekler. Eğer dentry zaten hashlenmişse, aynı düğümün yeniden eklenmesi, kendi kendine döngü (self-loop) oluşturmak da dahil olmak üzere kovayı bozabilir. Bu gerçekleştiğinde, __d_lookup() fonksiyonu hlist_bl yürütme sırasında sonsuza kadar dönebilir; genellikle yalnızca d_name.hash uyumsuzluk kontrolünde döngüye girer ve sonunda şu şekilde RCU stall raporlarını tetikler: rcu: INFO: rcu_sched self-detected stall on CPU rcu: 87-....: (2100 ticks this GP) idle=3a4c/1/0x4000000000000000 softirq=25003319/25003319 fqs=829 rcu: (t=2101 jiffies g=79058445 q=698988 ncpus=192) CPU: 87 UID: 2952868916 PID: 3933303 Comm: php-cgi8.3 Not tainted 6.18.17-i1-amd #950 NONE Hardware name: Dell Inc. PowerEdge R7615/0G9DHV, BIOS 1.6.6 09/22/2023 RIP: 0010:__d_lookup+0x46/0xb0 Code: c1 e8 07 48 8d 04 c2 48 8b 00 49 89 fc 49 89 f5 48 89 c3 48 83 e3 fe 48 83 f8 01 77 0f eb 2d 0f 1f 44 00 00 48 8b 1b 48 85 db <74> 20 39 6b 18 75 f3 48 8d 7b 78 e8 ba 85 d0 00 4c 39 63 10 74 1f RSP: 0018:ff745a70c8253898 EFLAGS: 00000282 RAX: ff26e470054cb208 RBX: ff26e470054cb208 RCX: 000000006e958966 RDX: ff26e48267340000 RSI: ff745a70c82539b0 RDI: ff26e458f74655c0 RBP: 000000006e958966 R08: 0000000000000180 R09: 9cd08d909b919a89 R10: ff26e458f74655c0 R11: 0000000000000000 R12: ff26e458f74655c0 R13: ff745a70c82539b0 R14: d0d0d0d0d0d0d0d0 R15: 2f2f2f2f2f2f2f2f FS: 00007f5770896980(0000) GS:ff26e482c5d88000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f5764de50c0 CR3: 000000a72abb5001 CR4: 0000000000771ef0 PKRU: 55555554 Call Trace: <TASK> lookup_fast+0x9f/0x100 walk_component+0x1f/0x150 link_path_walk+0x20e/0x3d0 path_lookupat+0x68/0x180 filename_lookup+0xdc/0x1e0 vfs_statx+0x6c/0x140 vfs_fstatat+0x67/0xa0 __do_sys_newfstatat+0x24/0x60 do_syscall_64+0x6a/0x230 entry_SYSCALL_64_after_hwframe+0x76/0x7e Bu duruma, yeniden kullanılan önbelleğe alınmış negatif dentry'ler ile ulaşılabilir. Bir Ceph lookup veya atomic_open işlemi, halihazırda hashlenmiş negatif bir dentry alabilir ve ardından fs/ceph/dir.c dosyası, "negatif" olmanın aynı zamanda "unhashed" olduğu varsayımını hatalı bir şekilde yapan iki yoldan birine girer: - ceph_finish_lookup(): MDS yanıtı izleme bilgisi olmadan -ENOENT şeklindedir -> d_add(dentry, NULL) - ceph_lookup(): paylaşılan yetkilerle tam bir dizin için yerel ENOENT hızlı yolu -> d_add(dentry, NULL) Dolayısıyla her iki yol da halihazırda hashlenmiş negatif bir dentry'yi yeniden ekleyebilir. Ceph, doğru deseni başka yerlerde zaten kullanmaktadır: ceph_fill_trace(), negatif null-dentry yanıtı için d_add(dn, NULL) fonksiyonunu yalnızca d_unhashed(dn) true olduğunda çağırır. fs/ceph/dir.c dosyasındaki her iki nokta da aynı şekilde düzeltilmiştir: d_add() fonksiyonu, negatif bir dentry için yalnızca gerçekten unhashed olduğunda çağrılır. Negatif dentry zaten hashlenmişse, olduğu yerde bırakılır ve olduğu gibi yeniden kullanılır. Bu işlem, unhashed dentry'ler için mevcut davranışı korurken, yeniden kullanılan hashlenmiş negatiflerin d_hash listesini bozmasını engeller.
Nasıl düzeltilir
- linux linux_kernel6.6.140, 6.12.86, 6.18.27, 7.0.4 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 | 2.6.34.1 ≤ v < 6.6.140, 6.7 ≤ v < 6.12.86, 6.13 ≤ v < 6.18.27, 6.19 ≤ v < 7.0.4, 2.6.34 | 6.6.140, 6.12.86, 6.18.27, 7.0.4 |
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.