🇰🇷 한글 설명
Linux 커널의 DRM vc4 HDMI 드라이버에서 오디오가 비디오보다 먼저 활성화될 때 Packet RAM이 꺼진 상태로 인포프레임을 기록하려 해 경고가 발생하는 문제가 수정되었습니다. Packet RAM 활성화를 Runtime PM 훅으로 옮겨 전원 관리 방식으로 처리하도록 변경되었습니다.
💡 쉬운 설명
라즈베리 파이 같은 기기에서 HDMI 소리가 화면보다 먼저 시작되면 내부 메모리가 꺼져 있어 오류가 발생할 수 있었습니다. 이 메모리의 켜고 끄는 시점을 전원 관리 쪽으로 옮겨 이 문제를 해결했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/vc4: hdmi: Move packet RAM enable to PM runtime
Audio can be triggered by the HPD handler and start up before video has
been restored, calling vc4_hdmi_write_infoframe() for the audio infoframe.
vc4_hdmi_write_infoframe() needs Packet RAM to be on to store the
infoframe, however, if the video hasn't been enabled,
vc4_hdmi_encoder_post_crtc_enable() hasn't been called and therefore, the
Packet RAM can be disabled by the time vc4_hdmi_write_infoframe() executes,
causing the following splat:
[ 201.570266] ------------[ cut here ]------------
[ 201.570293] Packet RAM has to be on to store the packet.
[ 201.570367] WARNING: drivers/gpu/drm/vc4/vc4_hdmi.c:683 at vc4_hdmi_write_infoframe+0x404/0x494 [vc4], CPU#0: wireplumber/1606
[...]
[ 201.658650] Hardware name: Raspberry Pi 4 Model B Rev 1.5 (DT)
[...]
[ 201.758499] Call trace:
[ 201.760967] vc4_hdmi_write_infoframe+0x404/0x494 [vc4] (P)
[ 201.766607] vc4_hdmi_write_audio_infoframe+0x1c/0x28 [vc4]
[ 201.772247] write_infoframe+0xbc/0x140 [drm_display_helper]
[ 201.777975] drm_atomic_helper_connector_hdmi_update_audio_infoframe+0x80/0xdc [drm_display_helper]
[ 201.787140] vc4_hdmi_audio_prepare+0x4ac/0x570 [vc4]
[ 201.792252] drm_connector_hdmi_audio_prepare+0x24/0x30 [drm_display_helper]
[ 201.799390] hdmi_codec_prepare+0x100/0x160 [snd_soc_hdmi_codec]
[ 201.805471] snd_soc_pcm_dai_prepare+0xd4/0x100 [snd_soc_core]
[ 201.811375] __soc_pcm_prepare+0x60/0x12c [snd_soc_core]
[ 201.816752] soc_pcm_prepare+0x34/0x58 [snd_soc_core]
[ 201.821863] snd_pcm_do_prepare+0x70/0x8c [snd_pcm]
[ 201.826798] snd_pcm_action_nonatomic+0xe4/0x174 [snd_pcm]
[ 201.832350] snd_pcm_prepare+0xc8/0xd8 [snd_pcm]
[ 201.837021] snd_pcm_common_ioctl+0x458/0x614 [snd_pcm]
[ 201.842308] snd_pcm_ioctl+0x30/0x48 [snd_pcm]
[ 201.846802] __arm64_sys_ioctl+0x88/0xd8
[ 201.850769] invoke_syscall+0x48/0xf4
[ 201.854470] el0_svc_common+0x80/0xd8
[ 201.858171] do_el0_svc+0x1c/0x28
[ 201.861520] el0_svc+0x3c/0xb0
[ 201.864605] el0t_64_sync_handler+0x68/0xdc
[ 201.868834] el0t_64_sync+0x198/0x19c
[ 201.872536] ---[ end trace 0000000000000000 ]---
Considering that Packet RAM enable is essentially a power management
configuration, move its enabling/disabling to the Runtime PM hooks.
Note that post_crtc_disable() still stops all infoframes, but keeps Packet
RAM enabled, leaving it to be disabled by runtime suspend.
📍 영향받는 시스템
Linux 커널 DRM vc4 HDMI 드라이버를 사용하는 Raspberry Pi 4 등 vc4 기반 시스템 (수정된 커널 버전 이전)
⚔️ 공격 벡터
CVSS 점수가 0.0으로 공개된 원격 공격 경로는 확인되지 않았으며, 주로 HDMI 오디오 시작 시 발생하는 커널 경고(WARNING) 및 안정성 문제입니다.
🛡️ 대응 방법
Linux 커널을 해당 커밋이 포함된 최신 안정 버전으로 업데이트하고 시스템을 재부팅하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 패치가 포함된 배포판의 수정 버전 이상인지 배포판 보안 공지나 커널 changelog로 확인하고, 'dmesg | grep "Packet RAM has to be on"' 결과가 없으면 경고가 발생하지 않은 것입니다.