🇰🇷 한글 설명
Linux 커널의 RDMA/efa 구성 요소에서 PBL(Page Block List) 청크 길이를 계산할 때 발생하는 오류입니다. 페이지 수가 특정 단위의 배수일 경우 마지막 청크의 길이를 0으로 잘못 계산하여, 장치가 해당 메모리 영역을 비어 있는 것으로 인식하고 등록을 거부하는 문제가 있습니다.
💡 쉬운 설명
컴퓨터가 메모리 주소 목록을 만들 때, 마지막 목록의 크기를 0이라고 잘못 계산하는 버그가 있었습니다. 이로 인해 장치가 메모리 사용을 거부하여 시스템 기능이 제대로 작동하지 않을 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/efa: Fix PBL chunk length computation
On register MR, when creating the PBL, if it's an indirect PBL we create
a chunk list to hold the PBL pages pointers. Each chunk is 4KB in size
and can hold 510 addresses (EFA_PTRS_PER_CHUNK) and has a 12-byte
control buffer at the end of it holding the next chunk's pointer and its
length.
If the PBL number of pages is a multiple of EFA_PTRS_PER_CHUNK, the
calculated last chunk length is wrongly computed as 0, even though that
chunk is fully populated with 510 real page pointers. This wrong length
is used both to DMA map the chunk and is propagated to the device,
causing the device to see the chunk as empty and reject the memory
registration.
Fix the calculation so it will be performed only if the number of pages
isn't a multiple of EFA_PTRS_PER_CHUNK, if it is, its already handled in
the above loop correctly.
Also prevent out-of-bounds reach in the chunks array in such scenario.
📍 영향받는 시스템
Linux kernel (RDMA/efa driver 포함 버전)
⚔️ 공격 벡터
직접적인 공격보다는 특정 메모리 등록 조건에서 서비스 거부(DoS) 또는 메모리 등록 실패를 유발할 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.