🇰🇷 한글 설명
Linux 커널의 dpll 서브시스템에서 dpll_pin이 여러 dpll_device 인스턴스 간에 공유될 때 NULL 포인터 역참조가 발생할 수 있는 취약점입니다. 드라이버 모듈 제거 중 장치가 해제되는 과정에서 특정 핀의 참조 정보가 불일치하여 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
여러 장치가 하나의 핀을 같이 쓰고 있을 때, 장치를 제거하는 과정에서 정보가 꼬여 컴퓨터 시스템이 갑자기 멈추거나 오류가 발생하는 문제입니다. 장치가 사라졌는데 아직 남아있다고 착각하여 잘못된 메모리 주소를 참조하기 때문에 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dpll: fix NULL pointer dereference in dpll_msg_add_pin_ref_sync()
When a dpll_pin is shared across multiple dpll_device instances and
those devices are being unregistered (e.g. during driver module removal),
a NULL pointer dereference can occur in dpll_msg_add_pin_ref_sync().
This happens under the following conditions:
- A pin is registered with two or more dpll devices (dpll_A, dpll_B)
- The pin has ref_sync pairs with other pins
- During unregistration of dpll_A's pins, a ref_sync partner pin is
unregistered first, removing it from dpll_A->pin_refs
- But since the partner pin is still registered with dpll_B, its
dpll_refs is not empty, so dpll_pin_ref_sync_pair_del() does NOT
run and the partner stays in the pin's ref_sync_pins xarray
- When the pin itself is then unregistered from dpll_A, the delete
notification calls dpll_msg_add_pin_ref_sync() which finds the
partner in ref_sync_pins, passes dpll_pin_available() (partner is
still registered with dpll_B), but dpll_pin_on_dpll_priv(dpll_A,
partner) returns NULL because partner was already removed from
dpll_A->pin_refs
- The NULL priv pointer is passed to the driver's ref_sync_get
callback, which dereferences it
BUG: kernel NULL pointer dereference, address: 0000000000000034
Oops: Oops: 0000 [#1] SMP NOPTI
RIP: 0010:zl3073x_dpll_input_pin_ref_sync_get+0x73/0x80 [zl3073x]
Call Trace:
dpll_msg_add_pin_ref_sync+0xb8/0x200
dpll_cmd_pin_get_one+0x3b6/0x4b0
dpll_pin_event_send+0x72/0x140
__dpll_pin_unregister+0x5a/0x2b0
dpll_pin_unregister+0x49/0x70
Fix this by skipping ref_sync pins whose priv pointer cannot be resolved
for the current dpll device.
📍 영향받는 시스템
Linux Kernel (dpll 서브시스템을 사용하는 환경)
⚔️ 공격 벡터
로컬 공격자가 드라이버 모듈을 제거하거나 특정 장치 해제 시나리오를 유도하여 커널 패닉(DoS)을 일으킬 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인하십시오.
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux