CVE-2022-50778
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: fortify: UBSAN_BOUNDS_LOCAL altında __compiletime_strlen() işlevini düzelt CONFIG_FORTIFY=y ve CONFIG_UBSAN_LOCAL_BOUNDS=y etkinleştirildiğinde, Android'in Uyumluluk Test Paketi (CTS) android.hardware.input.cts.tests çalıştırılırken bir çalışma zamanı paniği gözlemlenmektedir. Bu durum hidinput_allocate() içindeki bir strlen() çağrısından kaynaklanmaktadır. __compiletime_strlen(), __builtin_object_size() üzerinden uygulanmakta ve ardından NUL sonlandırmasını kontrol etmek için bir dizi erişimi gerçekleştirmektedir. __builtin_object_size() işlevinin bir tuhaflığı, değerleri çalışma zamanına bağlı olan dizeler için, bu boyutlar derleme zamanında belirlenebildiğinde __builtin_object_size(str, 1 veya 0) işlevinin olası değerlerin maksimum boyutunu döndürmesidir. Örnek: static const char *v = "FOO BAR"; static const char *y = "FOO BA"; unsigned long x (int z) { // 8 döndürür, bu da şudur: // max(__builtin_object_size(v, 1), __builtin_object_size(y, 1)) return __builtin_object_size(z ? v : y, 1); } Dolayısıyla FORTIFY_SOURCE etkinleştirildiğinde, __compiletime_strlen() işlevinin mevcut uygulaması çalışma zamanında v boyutunu kullanarak y'nin sonunun ötesine erişmeye çalışacaktır. UBSAN_LOCAL_BOUNDS ile birleştiğinde bir hata oluşur. hidinput_allocate(), değeri bir switch deyimine bağlı olarak kontrol akışına bağlı olan yerel bir C dizesine sahiptir, bu nedenle __builtin_object_size(str, 1) maksimum dize uzunluğuna değerlendirilir ve diğer tüm durumlar son karakter kontrolünde hata verir. hidinput_allocate(), yerel değişken yalnızca değişmez değerler alabildiğinden ve bu nedenle strlen() çağrı noktasını fortify etmeye çalışmanın bir faydası olmadığından, çalışma zamanı strlen() çağrılarından kaçınmak için temizlenebilir. Kontrol akışına bağlı durumu filtrelemek için makroda daha erken bir aşamada dizin 0'a karşı bir __builtin_constant_p() kontrolü gerçekleştir. FORTIFY_SOURCE iç bileşenlerinin beklenen davranış özelliklerini kontrol etmek için bir KUnit testi ekle.
Nasıl düzeltilir
- Linux Linuxed42391164e6839a48aaf4c53eefda516835e799, 5d59ad2bfb35fccfe2ad5e8bb8801f6224d3f7d4, d07c0acb4f41cc42a0d97530946965b3e4fa68c1 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 3009f891bb9f328945ebd5b71e12df7e2467f3dd ≤ v < ed42391164e6839a48aaf4c53eefda516835e799, 3009f891bb9f328945ebd5b71e12df7e2467f3dd ≤ v < 5d59ad2bfb35fccfe2ad5e8bb8801f6224d3f7d4, 3009f891bb9f328945ebd5b71e12df7e2467f3dd ≤ v < d07c0acb4f41cc42a0d97530946965b3e4fa68c1, 5.16 | ed42391164e6839a48aaf4c53eefda516835e799, 5d59ad2bfb35fccfe2ad5e8bb8801f6224d3f7d4, d07c0acb4f41cc42a0d97530946965b3e4fa68c1 |
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.