🔍 CVE-2025-37837

5.5
CVSS Score
MEDIUM
2025-05-09
2026-11-05 21:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 Tegra241 CMDQV 드라이버에서 SMMU 드라이버 롤백 시 devres 콜백 순서가 잘못되어 dmam_free_coherent() 호출 중 경고(WARNING)가 발생하는 문제를 수정했습니다. 초기화 실패 시 불필요한 unwind 루틴을 제거하고, devres가 메모리 해제를 담당하도록 변경했습니다.

💡 쉬운 설명

NVIDIA Tegra241 칩의 메모리 관리 드라이버가 오류 발생 시 정리 순서를 잘못 처리해 커널 경고가 출력되던 문제입니다. 정리 방식을 바로잡아 경고가 나오지 않도록 고쳤습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: iommu/tegra241-cmdqv: Fix warnings due to dmam_free_coherent() Two WARNINGs are observed when SMMU driver rolls back upon failure: arm-smmu-v3.9.auto: Failed to register iommu arm-smmu-v3.9.auto: probe with driver arm-smmu-v3 failed with error -22 ------------[ cut here ]------------ WARNING: CPU: 5 PID: 1 at kernel/dma/mapping.c:74 dmam_free_coherent+0xc0/0xd8 Call trace: dmam_free_coherent+0xc0/0xd8 (P) tegra241_vintf_free_lvcmdq+0x74/0x188 tegra241_cmdqv_remove_vintf+0x60/0x148 tegra241_cmdqv_remove+0x48/0xc8 arm_smmu_impl_remove+0x28/0x60 devm_action_release+0x1c/0x40 ------------[ cut here ]------------ 128 pages are still in use! WARNING: CPU: 16 PID: 1 at mm/page_alloc.c:6902 free_contig_range+0x18c/0x1c8 Call trace: free_contig_range+0x18c/0x1c8 (P) cma_release+0x154/0x2f0 dma_free_contiguous+0x38/0xa0 dma_direct_free+0x10c/0x248 dma_free_attrs+0x100/0x290 dmam_free_coherent+0x78/0xd8 tegra241_vintf_free_lvcmdq+0x74/0x160 tegra241_cmdqv_remove+0x98/0x198 arm_smmu_impl_remove+0x28/0x60 devm_action_release+0x1c/0x40 This is because the LVCMDQ queue memory are managed by devres, while that dmam_free_coherent() is called in the context of devm_action_release(). Jason pointed out that "arm_smmu_impl_probe() has mis-ordered the devres callbacks if ops->device_remove() is going to be manually freeing things that probe allocated": https://lore.kernel.org/linux-iommu/[email protected]/ In fact, tegra241_cmdqv_init_structures() only allocates memory resources which means any failure that it generates would be similar to -ENOMEM, so there is no point in having that "falling back to standard SMMU" routine, as the standard SMMU would likely fail to allocate memory too. Remove the unwind part in tegra241_cmdqv_init_structures(), and return a proper error code to ask SMMU driver to call tegra241_cmdqv_remove() via impl_ops->device_remove(). Then, drop tegra241_vintf_free_lvcmdq() since devres will take care of that.

📍 영향받는 시스템

Tegra241 CMDQV 기능을 사용하는 NVIDIA Tegra241(Grace 계열) 플랫폼에서 해당 수정이 적용되지 않은 Linux 커널 버전

⚔️ 공격 벡터

로컬 권한이나 원격 공격 경로가 확인되지 않은 커널 안정성(경고 출력) 결함으로, 직접적인 악용 방법은 보고되지 않았습니다

🛡️ 대응 방법

수정이 포함된 최신 Linux 커널 버전 또는 배포판 보안 업데이트로 업그레이드하십시오

🔧 검증 코드

출력된 커널 버전을 배포판 보안 공지 또는 커널 stable 브랜치의 수정 커밋 포함 여부와 비교하고, 해당 버전 이상이거나 수정 패치가 적용되었다면 안전합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel