🇰🇷 한글 설명
Linux 커널의 KVM arm64 구현에서 호스트의 FPSIMD/SVE/SME 상태를 처리하는 방식에 결함이 발견되었습니다. 이로 인해 호스트의 SVE 상태가 예기치 않게 폐기되거나 ptrace 동작 시 데이터가 손실되는 등의 문제가 발생할 수 있습니다.
💡 쉬운 설명
가상 머신을 사용할 때 컴퓨터의 중요한 계산용 데이터(SVE 등)가 제대로 저장되지 않고 사라지는 버그입니다. 이로 인해 프로그램이 갑자기 종료되거나 데이터가 꼬이는 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
There are several problems with the way hyp code lazily saves the host's
FPSIMD/SVE state, including:
* Host SVE being discarded unexpectedly due to inconsistent
configuration of TIF_SVE and CPACR_ELx.ZEN. This has been seen to
result in QEMU crashes where SVE is used by memmove(), as reported by
Eric Auger:
https://issues.redhat.com/browse/RHEL-68997
* Host SVE state is discarded *after* modification by ptrace, which was an
unintentional ptrace ABI change introduced with lazy discarding of SVE state.
* The host FPMR value can be discarded when running a non-protected VM,
where FPMR support is not exposed to a VM, and that VM uses
FPSIMD/SVE. In these cases the hyp code does not save the host's FPMR
before unbinding the host's FPSIMD/SVE/SME state, leaving a stale
value in memory.
Avoid these by eagerly saving and "flushing" the host's FPSIMD/SVE/SME
state when loading a vCPU such that KVM does not need to save any of the
host's FPSIMD/SVE/SME state. For clarity, fpsimd_kvm_prepare() is
removed and the necessary call to fpsimd_save_and_flush_cpu_state() is
placed in kvm_arch_vcpu_load_fp(). As 'fpsimd_state' and 'fpmr_ptr'
should not be used, they are set to NULL; all uses of these will be
removed in subsequent patches.
Historical problems go back at least as far as v5.17, e.g. erroneous
assumptions about TIF_SVE being clear in commit:
8383741ab2e773a9 ("KVM: arm64: Get rid of host SVE tracking/saving")
... and so this eager save+flush probably needs to be backported to ALL
stable trees.
📍 영향받는 시스템
Linux kernel v5.17 이상을 사용하는 arm64 아키텍처 시스템
⚔️ 공격 벡터
직접적인 원격 공격보다는 시스템 안정성을 해치거나 ptrace를 통한 디버깅 시 데이터 무결성을 깨뜨리는 방식
🛡️ 대응 방법
커널을 최신 보안 패치가 적용된 버전으로 업데이트하거나 해당 수정 사항이 포함된 안정화 버전으로 백포트 적용
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 확인