🇰🇷 한글 설명
Linux 커널 arm64 아키텍처의 ioremap_prot() 함수에서 사용자 보호 속성이 없는 값(PROT_NONE, 실행 전용 매핑)을 거부하도록 수정되었습니다. 이전에는 /dev/mem으로 PROT_NONE 매핑된 스택 페이지를 읽을 때 불필요한 커널 경고(WARN)가 발생했습니다. 이번 수정으로 해당 접근은 경고 없이 깔끔하게 실패합니다.
💡 쉬운 설명
특정 메모리 영역을 읽으려 할 때 커널이 잘못된 경고를 띄우는 문제를 고친 패치입니다. 접근 권한이 없는 메모리는 이제 경고 없이 정상적으로 거부됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
arm64: io: Reject non-user protection in ioremap_prot()
Mapping a stack-top page via /dev/mem with PROT_NONE and then
reading that process's /proc/<pid>/cmdline triggers a spurious WARN
in ioremap_prot() through generic_access_phys():
WARNING: ./arch/arm64/include/asm/io.h:275 at generic_access_phys
Call trace:
generic_access_phys+0x1c8/0x228 (P)
__access_remote_vm+0x2b4/0x398
access_remote_vm+0x14/0x30
get_mm_cmdline+0xf8/0x2a0
proc_pid_cmdline_read+0x68/0x120
generic_access_phys() passes the protection derived from the user PTE
to ioremap_prot(). On arm64, a PROT_NONE mapping is represented by a
present-invalid PTE, so pte_present() still returns true and the
protection reaches ioremap_prot().
A PROT_NONE mapping does not have PTE_USER, causing the existing
WARN_ON_ONCE() in ioremap_prot() to fire even though this is a valid
user mapping. Execute-only mappings have the same issue and must not
be readable through this path either.
ioremap_prot() should therefore reject protection values without
PTE_USER without warning. This makes the access fail cleanly for
PROT_NONE and execute-only mappings while retaining the existing
user-protection contract.
📍 영향받는 시스템
패치 이전의 arm64 기반 Linux 커널 (정확한 영향 버전은 CVE 공지 및 해당 커널 배포판 정보를 확인 필요)
⚔️ 공격 벡터
로컬 사용자가 /dev/mem으로 PROT_NONE 또는 실행 전용 매핑 영역을 매핑한 뒤 /proc/<pid>/cmdline을 읽어 커널 경고를 유발할 수 있음 (주로 서비스 거부 또는 정보 노출 가능성 점검 대상)
🛡️ 대응 방법
배포판에서 제공하는 최신 Linux 커널 보안 업데이트를 적용하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지의 패치된 커널 버전과 비교하여 최신 수정이 포함되었는지 확인합니다 (버전이 같거나 높고 해당 패치 백포트가 적용되어야 함).