🇰🇷 한글 설명
Linux 커널의 dma-buf 구성 요소에서 MMIO 크기가 4GB를 초과할 경우 발생하는 정수 오버플로 취약점입니다. 기존에는 mapped_len 변수가 32비트 unsigned int로 선언되어 있어, 64비트 크기의 길이를 처리할 때 값이 잘리는 현상이 발생했습니다.
💡 쉬운 설명
컴퓨터가 아주 큰 데이터를 처리할 때 숫자를 담는 그릇의 크기가 너무 작아 데이터 일부가 사라지는 문제입니다. 이로 인해 데이터가 잘못 전달되어 시스템 오류나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dma-buf: Fix silent overflow for phys vec to sgt
In case MMIO size is bigger than 4G and peer2peer DMA goes
through host bridge, we trigger a code path that assigns the
total linked IOVA (which is greater than 4G) to mapped_len.
Previously, `mapped_len` was declared as 32-bit `unsigned int`.
When accumulating `size_t` lengths, this leads to a silent wrap-around.
This truncation causes truncated lengths to be passed to functions
like `fill_sg_entry()`.
Fix this by changing `mapped_len` to `size_t` (64-bit). While
at it, fix similar potential overflow issues in `calc_sg_nents`
by using `check_add_overflow()` for `nents` and using
`unsigned int` for the loop iterator in `fill_sg_entry` to match.
📍 영향받는 시스템
Linux Kernel (dma-buf 관련 모듈 사용 시스템)
⚔️ 공격 벡터
4GB 이상의 대용량 MMIO를 사용하는 peer2peer DMA 환경에서의 데이터 처리 과정
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 mapped_len을 64비트(size_t)로 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux