CVE-2026-89767
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: ovl: casefold-mismatch yolundaki mükerrer end_creating() çağrısı düzeltildi ovl_create_real(), casefold tutarlılık kontrolü başarısız olduğunda yeni dentry nesnesini iki kez serbest bırakmaktadır. S_IFDIR dalı end_creating() fonksiyonunu çağırıp err değişkenini ayarlamakta ve ardından aynı dentry üzerinde tekrar end_creating() çağıran ortak out: etiketine geçmektedir: case S_IFDIR: newdentry = ovl_do_mkdir(ofs, dir, newdentry, attr->mode); err = PTR_ERR_OR_ZERO(newdentry); if (!err && ofs->casefold != ovl_dentry_casefolded(newdentry)) { pr_warn_ratelimited(...); end_creating(newdentry); /* birinci */ err = -EINVAL; } break; ... if (err) goto out; ... out: if (err) { end_creating(newdentry); /* ikinci, aynı dentry */ return ERR_PTR(err); } end_creating(), üst dizin üzerinde inode_unlock() ve dentry üzerinde dput() işlemini gerçekleştiren end_dirop() fonksiyonudur; bu nedenle üst dizinin i_rwsem kilidi iki kez açılmakta ve dentry referansı iki kez düşürülmektedir. İkinci kilit açma işlemi, elde tutulmayan bir kilidi serbest bıraktığından, söz konusu üst dizin altındaki tüm sonraki oluşturma işlemlerinin kilitlenmesine neden olmakta ve ikinci dput() ise hiç alınmamış bir referansı düşürmektedir. Bu dal, dfc7da402ccc ("ovl: Check for casefold consistency when creating new dentries") commit'i ile yalın bir dput() olarak eklenmişti ve bu durum zaten referansın iki kez serbest bırakılmasına yol açıyordu; fe497f0759e0 ("VFS: change vfs_mkdir() to unlock on failure.") commit'i her iki noktayı da end_creating() şeklinde değiştirerek mükerrer kilit açma sorununa yol açmıştır. Bu duruma yetkisiz bir kullanıcı tarafından erişilebilir. Katmanların casefold tutarlılığı, mount sırasında ovl_parse_layer() içinde ve her arama işleminde ovl_lookup_single() içinde doğrulanır; ancak ofs->workdir, kullanıcı tarafından sağlanan workdir içinde oluşturulan dahili "work" alt dizinidir ve bu alt dizin yeniden kontrol edilmez. Mount işleminden sonra buranın casefolded olarak işaretlenmesi, her ovl_create_temp() işleminin yanlış durumu devralmasına neden olur ve bu yol, üretilen bir isimle start_creating() kullanan ovl_start_creating_temp() üzerinden ovl_create_real()'a ulaşarak arama zamanı kontrolünü hiçbir zaman çalıştırmaz. unshare -Urm mount -t tmpfs -o casefold=utf8-12.1.0 tmpfs mnt mkdir -p mnt/lower/d mnt/upper mnt/work mnt/merged mount -t overlay ovl -o lowerdir=mnt/lower,\ upperdir=mnt/upper,workdir=mnt/work mnt/merged chattr +F mnt/work/work mkdir mnt/merged/d/sub # directory copy-up overlayfs: wrong inherited casefold (work/#5) ve bir sonraki copy-up işlemi, üst dizinin i_rwsem kilidinde sonsuza kadar bloklanır: mkdir D start_creating+0x65/0xb0 ovl_start_creating_temp+0xb0/0xe0 [overlay] ovl_create_temp+0xa3/0x1d0 [overlay] ovl_copy_up_one+0x1f1c/0x21c0 [overlay] ovl_copy_up_flags+0xf5/0x140 [overlay] ovl_create_object+0xb7/0x220 [overlay] ovl_mkdir+0x23/0x40 [overlay] İlgili daldaki end_creating() kaldırılmış ve temizleme işlemi, bu fonksiyondaki diğer tüm hata yollarının yaptığı gibi out: kısmına bırakılmıştır.
Nasıl düzeltilir
- Linux Linux2fa220bc0f84597cb6de665e5b5021c5901ddf00, b1aa8ab78a8e87aee9e306971465408e059f839a, 077ab8985ee278c3d8618182d335b0f0cd919e16 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | dfc7da402ccc92d6e4b01a4778a3f15f2496b9af ≤ v < 2fa220bc0f84597cb6de665e5b5021c5901ddf00, dfc7da402ccc92d6e4b01a4778a3f15f2496b9af ≤ v < b1aa8ab78a8e87aee9e306971465408e059f839a, dfc7da402ccc92d6e4b01a4778a3f15f2496b9af ≤ v < 077ab8985ee278c3d8618182d335b0f0cd919e16, 6.18 | 2fa220bc0f84597cb6de665e5b5021c5901ddf00, b1aa8ab78a8e87aee9e306971465408e059f839a, 077ab8985ee278c3d8618182d335b0f0cd919e16 |
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.