🇰🇷 한글 설명
Linux 커널의 mmiotrace 트레이서에서 trace_pipe를 닫을 때 리소스 누수가 발생하는 취약점이 해결되었습니다. mmiotrace 트레이서가 pipe_close 콜백을 올바르게 설정하지 않아, trace_pipe를 반복적으로 열고 닫을 경우 header_iter 할당과 pci_dev 참조가 해제되지 않고 남게 됩니다.
💡 쉬운 설명
시스템의 동작을 기록하는 도구를 반복적으로 켜고 끌 때, 사용했던 메모리와 자원이 제대로 정리되지 않고 쌓이는 문제입니다. 이 현상이 계속되면 시스템의 자원이 고갈될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Fix resource leak on mmiotrace trace_pipe close
The mmiotrace tracer was added May 12th 2008. At that time, resources
created in pipe_open() could not be freed because there was not
pipe_close function pointer of the tracer. The pipe_close function pointer
was added in December 7th, 2009, but the mmiotrace tracer was not updated.
mmio_pipe_open() allocates a header_iter and takes a pci_dev reference
when trace_pipe is opened. mmio_close() frees them, but it was only
wired to the tracer's .close callback.
tracing_release_pipe() invokes .pipe_close, not .close, when the
trace_pipe file is released. As a result, closing trace_pipe with the
mmiotrace tracer active leaked the header_iter allocation and left a
stale pci_dev reference.
Set .pipe_close to mmio_close, matching how function_graph wires both
callbacks to the same handler.
Note, if the trace_pipe is read to completion, it will clean up the
resources, but if one were to run:
# head -n 1 /sys/kernel/tracing/trace_pipe
VERSION 20070824
Over and over again, it would trigger a massive leak.
📍 영향받는 시스템
mmiotrace 트레이서가 포함된 Linux 커널 버전
⚔️ 공격 벡터
로컬 사용자가 trace_pipe 파일을 반복적으로 열고 닫는 행위를 통해 자원 고갈 유도
🛡️ 대응 방법
mmiotrace의 .pipe_close 콜백을 mmio_close로 설정하는 패치가 적용된 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인