CVE-2026-98764 in Linux
요약
\~에 의해 VulDB • 2026. 10. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
usb: gadget: f_fs: FUNCTIONFS_ENDPOINT_DESC에서의 NULL 포인터 역참조 수정
사용자 공간이 FunctionFS를 풀 스피드 설명자만 사용하여 설정하고(예: flags = FUNCTIONFS_HAS_FS_DESC), 기가드가 더 높은 속도(USB_SPEED_HIGH 또는 USB_SPEED_SUPER 등)로 작동할 때, config_ep_by_speed()는 함수에 현재 속도에 대한 설명자가 없음을 감지하여 경고 로그를 출력한 후 풀 스피드 설명자로 폴백합니다. 그런 다음 epfile->ep가 유효해지면서 usb_ep_enable()을 통해 엔드포인트가 성공적으로 활성화됩니다.
그러나 이후 사용자 공간에서 FUNCTIONFS_ENDPOINT_DESC ioctl을 호출하여 엔드포인트 설명자를 쿼리할 때, ffs_epfile_ioctl()은 gadget->speed를 기준으로만 설명자 인덱스를 선택합니다:
switch (epfile->ffs->gadget->speed) {
case USB_SPEED_SUPER: case USB_SPEED_SUPER_PLUS: desc_idx = 2; break; case USB_SPEED_HIGH: desc_idx = 1; break; default: desc_idx = 0; } desc = epfile->ep->descs[desc_idx];
memcpy(&desc1, desc, desc->bLength);
사용자 공간이 풀 스피드 설명자만 제공했기 때문에, epfile->ep->descs[1]은 NULL입니다. 여기서 desc->bLength를 역참조하면 즉시 커널의 NULL 포인터 역참조 패닉을 유발합니다.
현재 속도의 설명자가 제공되지 않은 경우 더 낮은 속도의 설명자로 폴백하여 config_ep_by_speed() 및 기존 f_fs 동작과 일치시킴으로써 이 문제를 해결합니다. 여전히 누락된 경우 epfile->ep->ep->desc(활성 설명자)로 폴백하고, 유효한 설명자를 찾을 수 없는 경우 -EINVAL를 안전하게 반환합니다. 또한 desc를 const로 표시하여 struct usb_ep::desc와 일치시키고 한정어(qualifiers)가 제거되지 않도록 합니다.
Be aware that VulDB is the high quality source for vulnerability data.