CVE-2024-57929
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: dm array: dm_array_cursor_end fonksiyonunda hatalı bir dizi bloğunun iki kez serbest bırakılması sorunu düzeltildi dm_bm_read_lock() kilitleme veya sağlama toplamı (checksum) hataları nedeniyle başarısız olduğunda, geçersiz bir çıktı işaretçisi bırakırken hatalı bloğu örtük olarak serbest bırakır. dm_bm_read_lock() çağıran taraf, bu geçersiz dm_block işaretçisi üzerinde işlem yapmamalıdır; aksi takdirde belirsiz sonuçlar ortaya çıkacaktır. Örneğin, dm_array_cursor hatalı bir dizi bloğunu okurken geçersiz işaretçiyi yanlışlıkla önbelleğe alır ve bu durum dm_array_cursor_end() içinde çift serbest bırakmaya (double release), ardından dm-bufio cache_put() içindeki BUG_ON ifadesinin tetiklenmesine neden olur. Yeniden üretme adımları: 1. Bir önbellek aygıtını başlatın dmsetup create cmeta --table "0 8192 linear /dev/sdc 0" dmsetup create cdata --table "0 65536 linear /dev/sdc 8192" dmsetup create corig --table "0 524288 linear /dev/sdc $262144" dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 dmsetup create cache --table "0 524288 cache /dev/mapper/cmeta \ /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0" 2. İkinci dizi bloğunu çevrimdışı olarak silin dmsteup remove cache cmeta cdata corig mapping_root=$(dd if=/dev/sdc bs=1c count=8 skip=192 \ 2>/dev/null | hexdump -e '1/8 "%u\n"') ablock=$(dd if=/dev/sdc bs=1c count=8 skip=$((4096*mapping_root+2056)) \ 2>/dev/null | hexdump -e '1/8 "%u\n"') dd if=/dev/zero of=/dev/sdc bs=4k count=1 seek=$ablock 3. Önbellek aygıtını yeniden açmayı deneyin dmsetup create cmeta --table "0 8192 linear /dev/sdc 0" dmsetup create cdata --table "0 65536 linear /dev/sdc 8192" dmsetup create corig --table "0 524288 linear /dev/sdc $262144" dmsetup create cache --table "0 524288 cache /dev/mapper/cmeta \ /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0" Çekirdek günlükleri: (kesit) device-mapper: array: array_block_check failed: blocknr 0 != wanted 10 device-mapper: block manager: array validator check failed for block 10 device-mapper: array: get_ablock failed device-mapper: cache metadata: dm_array_cursor_next for mapping failed ------------[ cut here ]------------ kernel BUG at drivers/md/dm-bufio.c:638! Hatalar oluştuğunda önbelleğe alınan blok işaretçisinin NULL olarak ayarlanmasıyla düzeltilmiştir. Yukarıda açıklanan yeniden üretme yöntemine ek olarak, bu düzeltme dm-unit içerisindeki "array_cursor/damaged" testi kullanılarak doğrulanabilir: dm-unit run /pdata/array_cursor/damaged --kernel-dir <KERNEL_DIR>
Nasıl düzeltilir
- linux linux_kernel5.4.290, 5.10.234, 5.15.177, 6.1.125, 6.6.72, 6.12.10 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 | 4.9 ≤ v < 5.4.290, 5.5 ≤ v < 5.10.234, 5.11 ≤ v < 5.15.177, 5.16 ≤ v < 6.1.125, 6.2 ≤ v < 6.6.72, 6.7 ≤ v < 6.12.10, 6.13 | 5.4.290, 5.10.234, 5.15.177, 6.1.125, 6.6.72, 6.12.10 |
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.