CVE-2024-56670 in Linux
요약
\~에 의해 VulDB • 2026. 07. 09.
리눅스 커널에서 다음 취약점이 해결되었습니다:
usb: gadget: u_serial: null 포인터 접근으로 인한 gs_start_io 크래시 문제 수정
극단적인 경우, 여러 스레드가 u_serial 드라이버에 동시에 액세스할 때 다음과 같은 상황이 발생할 수 있습니다. Thread A는 open 작업을 실행하며 gs_open을 호출하고, Thread B는 disconnect 작업을 실행하여 gserial_disconnect 함수를 호출합니다. 이 과정에서 port->port_usb 포인터가 NULL로 설정됩니다.
예시: Thread A Thread B gs_open() gadget_unbind_driver() gs_start_io() composite_disconnect() gs_start_rx() gserial_disconnect() ... ... spin_unlock(&port->port_lock) status = usb_ep_queue() spin_lock(&port->port_lock) spin_lock(&port->port_lock) port->port_usb = NULL gs_free_requests(port->port_usb->in) spin_unlock(&port->port_lock) Crash
이로 인해 Thread A는 gs_free_requests 함수 호출 시 null 포인터(port->port_usb가 null임)에 액세스하여 크래시가 발생합니다.
port_usb가 NULL인 경우, gserial_disconnect에서 해당 작업을 처리하므로 요청 해제는 건너뜁니다.
따라서 port->port_usb 값에 접근하기 전에 gs_start_io 내에서 null pointer 검사를 추가합니다.
콜 트레이스: gs_start_io+0x164/0x25c gs_open+0x108/0x13c tty_open+0x314/0x638 chrdev_open+0x1b8/0x258 do_dentry_open+0x2c4/0x700 vfs_open+0x2c/0x3c path_openat+0xa64/0xc60 do_filp_open+0xb8/0x164 do_sys_openat2+0x84/0xf0 __arm64_sys_openat+0x70/0x9c invoke_syscall+0x58/0x114 el0_svc_common+0x80/0xe0 do_el0_svc+0x1c/0x28 el0_svc+0x38/0x68
If you want to get best quality of vulnerability data, you may have to visit VulDB.