🇰🇷 한글 설명
Linux 커널의 USB gadget f_subset 드라이버에서 참조 카운트 불균형으로 인한 메모리 누수 취약점입니다. geth_alloc() 함수는 참조 카운트를 증가시키지만 geth_free() 함수에서 이를 감소시키지 않아 메모리가 제대로 해제되지 않습니다. 이로 인해 함수 해제 후 configfs를 통한 속성 설정이 불가능해집니다.
💡 쉬운 설명
USB 기기 에뮬레이션 시스템의 메모리 추적 카운터가 올바르게 정리되지 않는 문제입니다. 이로 인해 메모리 누수가 발생하고 USB 기기 설정 기능이 불가능해집니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
usb: gadget: f_subset: Fix unbalanced refcnt in geth_free
geth_alloc() increments the reference count, but geth_free() fails to
decrement it. This prevents the configuration of attributes via configfs
after unlinking the function.
Decrement the reference count in geth_free() to ensure proper cleanup.
📍 영향받는 시스템
Linux kernel의 USB gadget f_subset 드라이버를 사용하는 임베디드 Linux 시스템, USB 기기 에뮬레이션 환경, 스마트폰 기타 포트 지원 기능
⚔️ 공격 벡터
로컬 권한 상승 또는 configfs 인터페이스를 통한 조작으로 USB gadget 함수의 반복적 linking/unlinking 수행
🛡️ 대응 방법
Linux 커널을 geth_free() 함수의 참조 카운트 감소 로직 패치를 포함한 최신 버전으로 업데이트
🔧 검증 코드
커널 버전을 확인한 후 커널 소스의 geth_free() 함수에서 refcnt-- 코드의 존재 여부를 검사합니다. 결과가 0이면 취약점이 존재할 수 있으므로 보안 공지와 대조하여 패치 적용 여부를 확인해야 합니다.
uname -r && (grep -n 'refcnt--' /usr/src/linux/drivers/usb/gadget/f_subset.c 2>/dev/null | grep geth_free | wc -l) || echo 'Source not available'