CVE-2023-53642
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: x86: clear_user_rep_good() istisna işleme açıklaması düzeltildi Bu kod, üst akışta (upstream) d2c95f9d6802 ("x86: don't use REP_GOOD or ERMS for user memory clearing") commit'i ile kaldırıldığı için artık ana hatta mevcut değildir. Ancak, x86 bellek temizleme ve kopyalama iyileştirmelerinin tamamını geriye dönük olarak uygulamak yerine, clear_user_rep_good() içindeki son 'rep movsb' için istisna tablosu açıklamasının yerleşimi düzeltilmiştir: kullanıcı alanı erişimini gerçekleştiren gerçek komutu göstermek yerine, hemen öncesindeki yazmaç taşıma işlemini gösteriyordu. Bu durum kod akışı açısından mantıklı görünse de gerçek kullanım açısından hatalıdır: kullanıcı erişimi bir istisnaya neden olursa, istisna işleyici ilgili komutu istisna tablolarında bulamaz. Sonuç olarak, hatayı düzeltip -EFAULT döndürmek yerine, durum şuna benzer bir kernel oops raporuna dönüşürdü: BUG: unable to handle page fault for address: 0000000020081000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page ... RIP: 0010:clear_user_rep_good+0x1c/0x30 arch/x86/lib/clear_page_64.S:147 ... Call Trace: __clear_user arch/x86/include/asm/uaccess_64.h:103 [inline] clear_user arch/x86/include/asm/uaccess_64.h:124 [inline] iov_iter_zero+0x709/0x1290 lib/iov_iter.c:800 iomap_dio_hole_iter fs/iomap/direct-io.c:389 [inline] iomap_dio_iter fs/iomap/direct-io.c:440 [inline] __iomap_dio_rw+0xe3d/0x1cd0 fs/iomap/direct-io.c:601 iomap_dio_rw+0x40/0xa0 fs/iomap/direct-io.c:689 ext4_dio_read_iter fs/ext4/file.c:94 [inline] ext4_file_read_iter+0x4be/0x690 fs/ext4/file.c:145 call_read_iter include/linux/fs.h:2183 [inline] do_iter_readv_writev+0x2e0/0x3b0 fs/read_write.c:733 do_iter_read+0x2f2/0x750 fs/read_write.c:796 vfs_readv+0xe5/0x150 fs/read_write.c:916 do_preadv+0x1b6/0x270 fs/read_write.c:1008 __do_sys_preadv2 fs/read_write.c:1070 [inline] __se_sys_preadv2 fs/read_write.c:1061 [inline] __x64_sys_preadv2+0xef/0x150 fs/read_write.c:1061 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd Bu da durumu yanlış bir istisna açıklamasından ziyade bir dosya sistemi hatası gibi göstermekteydi. [ Bu tek satırlık düzeltmeye alternatif olarak, tüm bunları temizleyen şu üst akış serisi uygulanabilir: 68674f94ffc9 ("x86: don't use REP_GOOD or ERMS for small memory copies") 20f3337d350c ("x86: don't use REP_GOOD or ERMS for small memory clearing") adfcf4231b8c ("x86: don't use REP_GOOD or ERMS for user memory copies") * d2c95f9d6802 ("x86: don't use REP_GOOD or ERMS for user memory clearing") 3639a535587d ("x86: move stac/clac from user copy routines into callers") 577e6a7fd50d ("x86: inline the 'rep movs' in user copies for the FSRM case") 8c9b6a88b7e2 ("x86: improve on the non-rep 'clear_user' function") 427fda2c8a49 ("x86: improve on the non-rep 'copy_user' function") * e046fe5a36a9 ("x86: set FSRS automatically on AMD CPUs that have FSRM") e1f2750edc4a ("x86: remove 'zerorest' argument from __copy_user_nocache()") 034ff37d3407 ("x86: rewrite '__copy_user_nocache' function") bu sorunu çözmek için ya serinin tamamı ya da en azından işaretli iki commit gereklidir ]
Nasıl düzeltilir
- linux linux_kernel6.1.29, 6.2.16, 6.3.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 | 6.1 ≤ v < 6.1.29, 6.2 ≤ v < 6.2.16, 6.3 ≤ v < 6.3.3 | 6.1.29, 6.2.16, 6.3.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.