CVE-2022-48998
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: powerpc/bpf/32: Tail call testlerindeki Oops hatası düzeltildi test_bpf tail call testleri şu şekilde sonuçlanmaktadır: test_bpf: #0 Tail call leaf jited:1 85 PASS test_bpf: #1 Tail call 2 jited:1 111 PASS test_bpf: #2 Tail call 3 jited:1 145 PASS test_bpf: #3 Tail call 4 jited:1 170 PASS test_bpf: #4 Tail call load/store leaf jited:1 190 PASS test_bpf: #5 Tail call load/store jited:1 BUG: Unable to handle kernel data access on write at 0xf1b4e000 Faulting instruction address: 0xbe86b710 Oops: Kernel access of bad area, sig: 11 [#1] BE PAGE_SIZE=4K MMU=Hash PowerMac Modules linked in: test_bpf(+) CPU: 0 PID: 97 Comm: insmod Not tainted 6.1.0-rc4+ #195 Hardware name: PowerMac3,1 750CL 0x87210 PowerMac NIP: be86b710 LR: be857e88 CTR: be86b704 REGS: f1b4df20 TRAP: 0300 Not tainted (6.1.0-rc4+) MSR: 00009032 <EE,ME,IR,DR,RI> CR: 28008242 XER: 00000000 DAR: f1b4e000 DSISR: 42000000 GPR00: 00000001 f1b4dfe0 c11d2280 00000000 00000000 00000000 00000002 00000000 GPR08: f1b4e000 be86b704 f1b4e000 00000000 00000000 100d816a f2440000 fe73baa8 GPR16: f2458000 00000000 c1941ae4 f1fe2248 00000045 c0de0000 f2458030 00000000 GPR24: 000003e8 0000000f f2458000 f1b4dc90 3e584b46 00000000 f24466a0 c1941a00 NIP [be86b710] 0xbe86b710 LR [be857e88] __run_one+0xec/0x264 [test_bpf] Call Trace: [f1b4dfe0] [00000002] 0x2 (unreliable) Instruction dump: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX ---[ end trace 0000000000000000 ]--- Bu durum, yığının (stack) üzerine yazma girişimidir. Sorun, 38608ee7b690 ("bpf, tests: Add load store test case for tail call") commit'i ile eklenen testlerde görülmektedir. Bu hata, farklı bir stack_depth değerine sahip olan bir BPF programına tail call yapıldığında meydana gelir. Mevcut durumda, çağıran fonksiyon çağrılan fonksiyona tail call yaptığında yığın olduğu gibi korunur. Ancak çıkışta, çağrılan fonksiyon yığını kendi özelliklerine göre geri yükler. Bu nedenle burada, her çalışmada r1 hatalı bir şekilde 32 - 16 = 16 bayt artırılmaktadır. Bu yöntem, tail call sayısını çağıran fonksiyondan çağrılan fonksiyona yığın üzerinden aktarmak için uygulanmıştı. powerpc32 yığında bir "red zone" alanına sahip olmadığından, tail call sırasında yığının mevcut haliyle korunması gerekiyordu. Ancak BPF çerçeve boyutunun (frame size) farklı olabileceği öngörülmemişti. Yeni bir yaklaşım benimsenmiştir. Tail call sayısı sırasında taşıyıcı olarak r4 kaydedicisi kullanılır ve gerekirse fonksiyon girişinde yığına kaydedilir. Bu, girdi parametresinin r3'te olması gerektiği anlamına gelir; bu durum parametrenin 32 bit olması nedeniyle daha doğrudur ve böylece tail call, normal BPF fonksiyon girişiyle daha iyi eşleşir. Bunun dezavantajı ise girdi parametresini r3 ve r4 arasında sürekli taşımaktır; bu durum daha sonra optimize edilebilir. Bunu yapmak aynı zamanda tail call'lar ile normal bir fonksiyon çıkışı arasındaki ortak kısımları maksimize etme avantajını sağlar. Düzeltme ile birlikte tail call testleri artık başarıyla tamamlanmaktadır: test_bpf: #0 Tail call leaf jited:1 53 PASS test_bpf: #1 Tail call 2 jited:1 115 PASS test_bpf: #2 Tail call 3 jited:1 154 PASS test_bpf: #3 Tail call 4 jited:1 165 PASS test_bpf: #4 Tail call load/store leaf jited:1 101 PASS test_bpf: #5 Tail call load/store jited:1 141 PASS test_bpf: #6 Tail call error path, max count reached jited:1 994 PASS test_bpf: #7 Tail call count preserved across function calls jited:1 140975 PASS test_bpf: #8 Tail call error path, NULL target jited:1 110 PASS test_bpf: #9 Tail call error path, index out of range jited:1 69 PASS test_bpf: test_tail_calls: Summary: 10 PASSED, 0 FAILED, [10/10 JIT'ed]
Nasıl düzeltilir
- linux linux_kernel6.0.12 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 | 5.13 ≤ v < 6.0.12, 6.1 | 6.0.12 |
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.