🇰🇷 한글 설명
Linux 커널의 DRM/MSM/DPU 디스플레이 드라이버에서 시스템에 할당되지 않은 리소스(DSC 블록)가 NULL 포인터로 반환되어 null-pointer dereference로 인한 시스템 lockup이 발생할 수 있습니다. 패치를 통해 num_blks가 NULL 블록을 초과하지 않도록 제한하고 에러를 출력하여 문제를 방지합니다.
💡 쉬운 설명
Linux 운영 체제의 디스플레이 드라이버가 존재하지 않는 하드웨어 리소스에 접근하려 할 때 시스템이 중단될 수 있었습니다. 이제 드라이버가 유효하지 않은 리소스 접근을 감지하고 거부하여 시스템이 안정적으로 작동합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/msm/dpu: Disallow unallocated resources to be returned
In the event that the topology requests resources that have not been
created by the system (because they are typically not represented in
dpu_mdss_cfg ^1), the resource(s) in global_state (in this case DSC
blocks, until their allocation/assignment is being sanity-checked in
"drm/msm/dpu: Reject topologies for which no DSC blocks are available")
remain NULL but will still be returned out of
dpu_rm_get_assigned_resources, where the caller expects to get an array
containing num_blks valid pointers (but instead gets these NULLs).
To prevent this from happening, where null-pointer dereferences
typically result in a hard-to-debug platform lockup, num_blks shouldn't
increase past NULL blocks and will print an error and break instead.
After all, max_blks represents the static size of the maximum number of
blocks whereas the actual amount varies per platform.
^1: which can happen after a git rebase ended up moving additions to
_dpu_cfg to a different struct which has the same patch context.
Patchwork: https://patchwork.freedesktop.org/patch/517636/
📍 영향받는 시스템
ARM 기반 Qualcomm MSM SoC를 탑재한 Linux 기기의 DRM/MSM/DPU 드라이버
⚔️ 공격 벡터
특정 토폴로지 요청으로 할당되지 않은 DSC 블록 접근 시도 시 시스템 lockup 발생
🛡️ 대응 방법
Linux 커널 업데이트 (patchwork ID: 517636) 적용 또는 git rebase로 DPU 설정 재정렬
🔧 검증 코드
DPU 드라이버 코드에서 num_blks 검사가 추가되었는지 확인하거나, 커널 버전이 패치가 적용된 버전 이상인지 확인하면 됩니다.
grep -r 'num_blks shouldn' $(find /lib/modules -name dpu_rm.c 2>/dev/null | head -1) 2>/dev/null || uname -r