🇰🇷 한글 설명
Linux 커널 DRM fbdev 헬퍼에서, fbdev_probe()가 -EAGAIN 이외의 오류로 실패할 경우 deferred_setup 플래그가 설정되지 않아 mode_set->fb가 NULL인 상태로 남는 문제가 수정되었습니다. 이로 인해 후속 restore 호출 시 __drm_atomic_helper_set_config()에서 WARN_ON이 발생할 수 있었습니다. 실패 시 항상 재시도 대기 상태로 표시하도록 수정되었습니다.
💡 쉬운 설명
그래픽 화면 초기 설정이 실패했을 때 커널이 이를 제대로 기억하지 못해, 나중에 화면을 복원하는 과정에서 경고가 발생할 수 있었습니다. 이번 수정으로 실패 시 설정을 다시 시도하도록 처리됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/fb-helper: defer setup when fbdev_probe() fails, not just on -EAGAIN
__drm_fb_helper_initial_config_and_unlock() calls
drm_client_modeset_probe() first, which already fills in each
mode_set->mode/num_connectors for every connected output, and only
afterwards calls drm_fb_helper_single_fb_probe() to create
fb_helper->fb and wire it into those mode_sets via
drm_setup_crtcs_fb().
If drm_fb_helper_single_fb_probe() fails with anything other than
-EAGAIN (e.g. dev->driver->fbdev_probe() itself fails), the function
bails out before drm_setup_crtcs_fb() runs and before setting
fb_helper->deferred_setup. The client is left with mode_sets that
have a mode and connectors but mode_set->fb == NULL, and nothing
marks this fb_helper as needing a retry.
__drm_fb_helper_restore_fbdev_mode_unlocked() only skips committing
when fb_helper->deferred_setup is set, so a later .restore() call
(drm_lastclose() on process exit, in this report) commits the stale
mode_set through drm_client_modeset_commit() ->
drm_client_modeset_commit_atomic() -> __drm_atomic_helper_set_config(),
which hits WARN_ON(!set->fb).
Mark fb_helper->deferred_setup on any drm_fb_helper_single_fb_probe()
failure, not just -EAGAIN, so restore keeps skipping the commit until
a later hotplug event successfully re-probes and re-populates
mode_set->fb. The real error code is still returned to the caller
unchanged.
📍 영향받는 시스템
Linux 커널 DRM 드라이버(fbdev 헬퍼 사용) 일부 버전; 정확한 영향 버전은 패치 커밋 기준으로 확인 필요
⚔️ 공격 벡터
공개된 정보상 원격 공격 벡터는 확인되지 않으며, 주로 커널 경고(WARN_ON) 및 안정성 문제에 해당
🛡️ 대응 방법
Linux 커널을 해당 수정이 포함된 최신 안정 버전 또는 배포판 보안 업데이트로 갱신
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 커널 패치 커밋과 대조하여 수정 포함 여부를 확인합니다 (수정 여부가 불확실하면 배포판 패키지 changelog 확인)