🔍 CVE-2026-46209

7.8
CVSS Score
HIGH
2026-05-28
2026-10-19 20:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 drm/gem 구성 요소에서 평면 차원 계산 방식의 불일치로 인해 발생하는 취약점입니다. 특정 픽셀 포맷에서 정수 나눗셈과 올림 계산 방식의 차이로 인해 GEM 객체의 크기 검증을 우회할 수 있으며, 이는 GPU가 객체 경계를 벗어난 메모리에 접근하게 만듭니다.

💡 쉬운 설명

그래픽 데이터를 처리할 때 크기를 계산하는 방식이 서로 달라 발생하는 오류입니다. 이 오류를 이용하면 컴퓨터의 허용된 메모리 범위를 넘어 다른 데이터를 읽거나 쓸 수 있는 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs() drm_gem_fb_init_with_funcs() computes sub-sampled plane dimensions using plain integer division: unsigned int width = mode_cmd->width / (i ? info->hsub : 1); unsigned int height = mode_cmd->height / (i ? info->vsub : 1); However, the ioctl-level framebuffer_check() in drm_framebuffer.c uses drm_format_info_plane_width/height() which round up dimensions via DIV_ROUND_UP(). This inconsistency corrupts the subsequent GEM object size check for certain pixel format and dimension combinations. For example, with NV12 (vsub=2) and a 1-pixel-tall framebuffer the GEM size validation path sees height=0 instead of height=1. The expression (height - 1) then wraps to UINT_MAX as an unsigned int, causing min_size to overflow and wrap back to a small value. A tiny GEM object therefore passes the size guard, yet when the GPU accesses the chroma plane it will read or write memory beyond the object's bounds. Fix by replacing the open-coded divisions with drm_format_info_plane_width() and drm_format_info_plane_height(), which use DIV_ROUND_UP() and match the calculation already used in framebuffer_check().

📍 영향받는 시스템

Linux Kernel (drm/gem 모듈을 사용하는 시스템)

⚔️ 공격 벡터

특정 픽셀 포맷과 차원을 가진 프레임버퍼를 생성하는 ioctl 호출을 통한 메모리 오버플로우 유도

🛡️ 대응 방법

drm_format_info_plane_width/height() 함수를 사용하여 차원 계산 방식을 통일한 최신 커널로 업데이트

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel