🇰🇷 한글 설명
Linux 커널의 tegra241-cmdqv IOMMU 드라이버에서 vSID 값이 SID_MATCH 필드의 비트 너비를 초과할 경우 이를 적절히 검증하지 못하는 취약점이 발견되었습니다. 이로 인해 게스트가 제공한 잘못된 vSID 값이 하드웨어 레지스터에 기록될 때 상위 비트가 유실되어 의도치 않은 스트림 ID와 매칭되는 에일리어싱 문제가 발생할 수 있습니다.
💡 쉬운 설명
가상 머신에서 사용하는 식별 번호가 너무 클 경우, 시스템이 이를 제대로 확인하지 못해 엉뚱한 번호로 착각하는 문제입니다. 이로 인해 보안 경계가 무너져 다른 데이터에 접근할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/tegra241-cmdqv: Reject a vSID wider than the SID_MATCH field
tegra241_vintf_init_vsid() programs the guest-provided vSID into SID_MATCH,
whose VIRT_SID field spans bits [20:1] with bit 0 as the match-enable flag.
The HW therefore matches only a 20-bit Stream ID.
The bound check rejects only virt_sid > UINT_MAX, which admits a value far
wider than the field. The write "virt_sid << 1 | 0x1" then drops every bit
above 20: a virt_sid of 0x80000000 lands as SID_MATCH = 0x1, a valid match
on vSID 0, so the entry aliases the wrong Stream ID. Because vdev->virt_id
is guest-controlled, a VMM can trigger it.
Validate virt_sid against the field width with FIELD_MAX(), and program the
register with FIELD_PREP() so the value and the field stay consistent.
📍 영향받는 시스템
Linux kernel (tegra241-cmdqv driver component)
⚔️ 공격 벡터
게스트 OS가 제어 가능한 vdev->virt_id 값을 조작하여 VMM을 통해 트리거
🛡️ 대응 방법
virt_sid 값을 FIELD_MAX()를 사용하여 필드 너비에 맞게 검증하고, FIELD_PREP()를 사용하여 레지스터에 기록하도록 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인