CVE-2025-38104
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: drm/amdgpu: SRIOV'da Öncelik Tersinmesi'ni (Priority Inversion) önlemek için RLCG yazmaç erişiminde Mutex yerine Spinlock kullanılmıştır. RLCG Yazmaç Erişimi; TLB temizlemeleri ve yazmaç okumaları dahil olmak üzere, sanallaştırılmış bir ortamda sanal fonksiyonların GPU yazmaçlarına güvenli bir şekilde erişmesini sağlayan bir yöntemdir. Birden fazla iş parçacığı veya VF aynı yazmaçlara eş zamanlı olarak erişmeye çalıştığında, bu durum yarış durumlarına (race conditions) yol açabilir. Sürücü, RLCG arayüzünü kullanarak yazmaçlara erişimi serileştirebilir. Bu, yazmaçlara aynı anda yalnızca bir iş parçacığının erişebileceği anlamına gelir; böylece çatışmalar önlenir ve işlemlerin doğru şekilde gerçekleştirilmesi sağlanır. Ek olarak, düşük öncelikli bir görev, yüksek öncelikli bir görevin ihtiyaç duyduğu bir mutex'i tuttuğunda, yani spinlock tutan bir iş parçacığı bir mutex edinmeye çalıştığında, bu durum öncelik tersinmesine yol açabilir. Özellikle hızlı bir kod yolundaki amdgpu_virt_rlcg_reg_rw içindeki yazmaç erişimi kritiktir. Çağrı yığını, mutex edinmeye çalışan amdgpu_virt_rlcg_reg_rw fonksiyonunun çağrıldığını göstermektedir. Bu fonksiyon, gmc_v11_0_flush_gpu_tlb tarafından çağrılan amdgpu_sriov_wreg üzerinden tetiklenmektedir. [ BUG: Invalid wait context ] hatası, bir iş parçacığının uykuya dalmasına izin verilmeyen bir bağlamdayken (bir spinlock tutmak gibi) bir mutex edinmeye çalıştığını belirtir. Aşağıdaki sorun düzeltilmiştir: [ 253.013423] ============================= [ 253.013434] [ BUG: Invalid wait context ] [ 253.013446] 6.12.0-amdstaging-drm-next-lol-050225 #14 Tainted: G U OE [ 253.013464] ----------------------------- [ 253.013475] kworker/0:1/10 is trying to lock: [ 253.013487] ffff9f30542e3cf8 (&adev->virt.rlcg_reg_lock){+.+.}-{3:3}, at: amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu] [ 253.013815] other info that might help us debug this: [ 253.013827] context-{4:4} [ 253.013835] 3 locks held by kworker/0:1/10: [ 253.013847] #0: ffff9f3040050f58 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x3f5/0x680 [ 253.013877] #1: ffffb789c008be40 ((work_completion)(&wfc.work)){+.+.}-{0:0}, at: process_one_work+0x1d6/0x680 [ 253.013905] #2: ffff9f3054281838 (&adev->gmc.invalidate_lock){+.+.}-{2:2}, at: gmc_v11_0_flush_gpu_tlb+0x198/0x4f0 [amdgpu] [ 253.014154] stack backtrace: [ 253.014164] CPU: 0 UID: 0 PID: 10 Comm: kworker/0:1 Tainted: G U OE 6.12.0-amdstaging-drm-next-lol-050225 #14 [ 253.014189] Tainted: [U]=USER, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE [ 253.014203] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/18/2024 [ 253.014224] Workqueue: events work_for_cpu_fn [ 253.014241] Call Trace: [ 253.014250] <TASK> [ 253.014260] dump_stack_lvl+0x9b/0xf0 [ 253.014275] dump_stack+0x10/0x20 [ 253.014287] __lock_acquire+0xa47/0x2810 [ 253.014303] ? srso_alias_return_thunk+0x5/0xfbef5 [ 253.014321] lock_acquire+0xd1/0x300 [ 253.014333] ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu] [ 253.014562] ? __lock_acquire+0xa6b/0x2810 [ 253.014578] __mutex_lock+0x85/0xe20 [ 253.014591] ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu] [ 253.014782] ? sched_clock_noinstr+0x9/0x10 [ 253.014795] ? srso_alias_return_thunk+0x5/0xfbef5 [ 253.014808] ? local_clock_noinstr+0xe/0xc0 [ 253.014822] ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu] [ 253.015012] ? srso_alias_return_thunk+0x5/0xfbef5 [ 253.015029] mutex_lock_nested+0x1b/0x30 [ 253.015044] ? mutex_lock_nested+0x1b/0x30 [ 253.015057] amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu] [ 253.015249] amdgpu_sriov_wreg+0xc5/0xd0 [amdgpu] [ 253.015435] gmc_v11_0_flush_gpu_tlb+0x44b/0x4f0 [amdgpu] [ 253.015667] gfx_v11_0_hw_init+0x499/0x29c0 [amdgpu] [ 253.015901] ? __pfx_smu_v13_0_update_pcie_parameters+0x10/0x10 [amdgpu] [ 253.016159] ? srso_alias_return_thunk+0x5/0xfbef5 [ 253.016173] ? smu_hw_init+0x18d/0x300 [amdgpu] [ 253.016403] amdgpu_device_init+0x29ad/0x36a0 [amdgpu] [ 253.016614] amdgpu_driver_load_kms+0x1a/0xc0 [amdgpu] [ 253.0170 ---kesildi---
Nasıl düzeltilir
- linux linux_kernel6.2, 6.7, 6.12.39, 6.13.11, 6.14.2 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.105 ≤ v < 6.2, 6.6.46 ≤ v < 6.7, 6.10.5 ≤ v < 6.12.39, 6.13 ≤ v < 6.13.11, 6.14 ≤ v < 6.14.2 | 6.2, 6.7, 6.12.39, 6.13.11, 6.14.2 |
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.