[하루한줄] CVE-2021-1905: Qualcomm Adreno GPU memory mapping use-after-free

URL

CVE-2021-1905: Qualcomm Adreno GPU memory mapping use-after-free

Target

Qualcomm Adreno GPU

Explain

Qualcomm Adreno GPU는 여러 프로세스의 메모리 매핑을 동싱에 처리하는 과정에서 Use-after-free 취약점이 발생합니다. GPU는 여러 VMA(Linux Virtual Memory Access)와 메모리 매핑을 공유하고 하나의 매핑이 닫히면 kpsl_gpumem_vm_close 함수를 호출해 entry->memdesc.useraddr 필드를 초기화합니다. 문제는 해당 필드가 여러 VMA에 공유되며 entry가 이미 매핑되었는지 확인하는 데 사용되므로 나머지 VMA에 의도하지 않은 버그가 발생합니다. Linux kernel mmap implementation에 따라 서로 다른 프로세스에서 동시에 호출이 불가능한 함수 kpsl_get_unmapped_area를 두 프로세스에서 같은 GPU 매핑에 대해 경쟁하도록 race condition을 발생시킬 수 있습니다. 따라서 구조체 kpsl_mem_entry가 서로 다른 두 프로세스에서 동시에 사용되어 use-after-free로 이어질 수 있습니다.