🇰🇷 한글 설명
리눅스 커널의 Qualcomm GFX3D 클록 드라이버에서 부모 클록 맵 설정 누락으로 인해 시스템 충돌이 발생하는 취약점입니다. 이전 커밋으로 인한 API 변경으로 인해 best_parent_hw가 무시되면서 clk_hw_round_rate 호출 시 크래시가 유발됩니다.
💡 쉬운 설명
그래픽 처리 관련 클록 설정 과정에서 시스템 오류가 발생할 수 있는 결함이 있습니다. 이는 시스템의 불안정성을 초래할 수 있는 중립적 버그입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
clk: qcom: gfx3d: add parent to parent request map
After commit d228ece36345 ("clk: divider: remove round_rate() in favor
of determine_rate()") determining GFX3D clock rate crashes, because the
passed parent map doesn't provide the expected best_parent_hw clock
(with the roundd_rate path before the offending commit the
best_parent_hw was ignored).
Set the field in parent_req in addition to setting it in the req,
fixing the crash.
clk_hw_round_rate (drivers/clk/clk.c:1764) (P)
clk_divider_bestdiv (drivers/clk/clk-divider.c:336)
divider_determine_rate (drivers/clk/clk-divider.c:358)
clk_alpha_pll_postdiv_determine_rate (drivers/clk/qcom/clk-alpha-pll.c:1275)
clk_core_determine_round_nolock (drivers/clk/clk.c:1606)
clk_core_round_rate_nolock (drivers/clk/clk.c:1701)
__clk_determine_rate (drivers/clk/clk.c:1741)
clk_gfx3d_determine_rate (drivers/clk/qcom/clk-rcg2.c:1268)
clk_core_determine_round_nolock (drivers/clk/clk.c:1606)
clk_core_round_rate_nolock (drivers/clk/clk.c:1701)
clk_core_round_rate_nolock (drivers/clk/clk.c:1710)
clk_round_rate (drivers/clk/clk.c:1804)
dev_pm_opp_set_rate (drivers/opp/core.c:1440 (discriminator 1))
msm_devfreq_target (drivers/gpu/drm/msm/msm_gpu_devfreq.c:51)
devfreq_set_target (drivers/devfreq/devfreq.c:360)
devfreq_update_target (drivers/devfreq/devfreq.c:426)
devfreq_monitor (drivers/devfreq/devfreq.c:458)
process_one_work (arch/arm64/include/asm/jump_label.h:36 include/trace/events/workqueue.h:110 kernel/workqueue.c:3284)
worker_thread (kernel/workqueue.c:3356 (discriminator 2) kernel/workqueue.c:3443 (discriminator 2))
kthread (kernel/kthread.c:467)
ret_from_fork (arch/arm64/kernel/entry.S:861)
📍 영향받는 시스템
Qualcomm SoC 기반 리눅스 커널 (GFX3D 클록 드라이버 사용 시스템)
⚔️ 공격 벡터
로컬 시스템의 전력 관리 또는 성능 조절 기능(Devfreq)을 통해 클록 주파수 변경 요청 시 자발적 충돌 유발
🛡️ 대응 방법
공식 커널 패치 적용 또는 clk-rcg2.c에서 parent_req 필드 설정 코드 수정
🔧 검증 코드
패치가 적용된 경우 해당 함수 내 parent_req 설정 로직이 포함되어 있어야 하며, 결과 값이 0이 아니면 수정된 코드가 존재함을 의미합니다.
grep -r 'clk_gfx3d_determine_rate' /lib/modules/$(uname -r)/build/drivers/clk/qcom/clk-rcg2.c 2>/dev/null | wc -l