🇰🇷 한글 설명
Linux 커널의 rtlwifi 드라이버 프로브 실패 경로에서 메모리 누수 및 잘못된 접근이 발생합니다. 초기화 실패 시 역순으로 정리하지 않아 워크큐 파괴 후 잘못된 메모리 접근이 일어나며, rtl_pci_deinit과 deinit_sw_vars 호출 누락으로 인한 메모리 누수가 발생합니다.
💡 쉬운 설명
WiFi 드라이버가 시작할 때 실패하면 정리 과정에서 메모리가 제대로 해제되지 않는 문제입니다. 이는 시스템 메모리 낭비와 커널 패닉을 야기할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: rtlwifi: fix memory leaks and invalid access at probe error path
Deinitialize at reverse order when probe fails.
When init_sw_vars fails, rtl_deinit_core should not be called, specially
now that it destroys the rtl_wq workqueue.
And call rtl_pci_deinit and deinit_sw_vars, otherwise, memory will be
leaked.
Remove pci_set_drvdata call as it will already be cleaned up by the core
driver code and could lead to memory leaks too. cf. commit 8d450935ae7f
("wireless: rtlwifi: remove unnecessary pci_set_drvdata()") and
commit 3d86b93064c7 ("rtlwifi: Fix PCI probe error path orphaned memory").
📍 영향받는 시스템
Realtek rtlwifi 드라이버를 사용하는 Linux 커널 (5.10 ~ 6.12 버전)
⚔️ 공격 벡터
로컬 공격자가 드라이버 로드/언로드 또는 WiFi 카드 삽입/제거를 반복하여 메모리 누수 유발
🛡️ 대응 방법
Linux 커널 패치 적용 (커밋: 메모리 누수 수정 패치) 또는 최신 커널 버전으로 업그레이드
🔧 검증 코드
rtlwifi 드라이버 파일에서 패치 적용 여부 확인 (패치 적용 시 정리 함수 호출 순서 수정됨)
grep -r 'rtl_deinit_core\|rtl_pci_deinit\|deinit_sw_vars' /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/ 2>/dev/null | head -5