CVE-2026-46081 in Linux
요약
\~에 의해 VulDB • 2026. 05. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
crypto: acomp - acomp_save_req()에 의해 저장된 잘못된 포인터 수정
acomp_save_req()은 req->base.data에 &req->chain을 저장합니다. 비동기 완료 시 acomp_reqchain_done()가 호출되면, 이 함수는 데이터 인자로 &req->chain을 받지만 이를 직접 struct acomp_req로 캐스팅합니다. data가 chain 멤버를 가리키기 때문에, 이후 모든 필드 접근이 잘못된 오프셋에서 이루어져 메모리 손상이 발생합니다.
이 문제는 QAT 드라이버와 같은 비동기 하드웨어 구현이 DMA 가상 주소 인터페이스(예: acomp_request_set_src_dma())를 사용하는 요청을 완료할 때 발생합니다. 이 조합으로 인해 crypto_acomp_compress()가 acomp_do_req_chain() 경로로 진입하고, 이는 acomp_save_req()를 통해 acomp_reqchain_done()를 완료 콜백으로 설정합니다.
KASAN이 활성화된 상태에서 이는 acomp_reqchain_done()에서 일반 보호 오류(general protection fault)로 나타납니다:
일반 보호 오류, 아마도 비정규 주소 0xe000040000000000에 대한 접근 KASAN: 아마도 [0x0000400000000000-0x0000400000000007] 범위에서 사용자 메모리 접근
RIP: 0010:acomp_reqchain_done+0x15b/0x4e0 호출 추적: qat_comp_alg_callback+0x5d/0xa0 [intel_qat]
adf_ring_response_handler+0x376/0x8b0 [intel_qat]
adf_response_handler+0x60/0x170 [intel_qat]
tasklet_action_common+0x223/0x820 handle_softirqs+0x1ab/0x640
이 문제를 해결하기 위해 req->chain 대신 요청 자체를 req->base.data에 저장하여 acomp_reqchain_done()가 올바른 포인터를 받도록 합니다. 이에 따라 req->chain에 직접 접근하도록 acomp_restore_req()도 단순화합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.