CVE-2026-99141 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 28.

리눅스 커널에서 다음 취약점이 해결되었습니다:

tracing: print_graph_function_event()에서의 크래시 수정

tracing_set_tracer()는 새로 선택된 트레이서의 플래그를 다음과 같이 할당합니다:

tr->current_trace_flags = t->flags ? : t->tracer->flags;

새로운 트레이서가 hwlat, irqsoff 또는 wakeup과 같이 정적 플래그와 기본 플래그 모두 정의하지 않는 경우, add_tracer()에는 해당 인스턴스별 플래그 복사본이 없으며 두 피연산자가 NULL이므로 tr->current_trace_flags도 결국 NULL이 됩니다.

트레이서를 전환할 때 링 버퍼가 지워지지 않습니다: 현재 current_trace_flags가 할당된 후에 tracer_init() 내부에서 리셋됩니다. 만약 버퍼에 이전 트레이서의 function_graph 엔트리가 여전히 포함되어 있는 경우, 그 중 하나를 출력하면 NULL 포인터를 역참조합니다. 이는 ftrace 스트레스 테스트 중에 cat trace 명령을 실행했을 때 발생했습니다:

BUG: kernel NULL pointer dereference, address: 0000000000000000 #PF: supervisor read access in kernel mode RIP: 0010:print_graph_function_event+0xe/0x20 Call Trace: s_show+0x4d/0x110 seq_read_iter+0x2d4/0x490 seq_read+0x130/0x170 vfs_read+0xb5/0x370 ksys_read+0x6d/0xe0 do_syscall_64+0xbc/0x450

스냅샷 버퍼는 전혀 리셋되지 않으므로, 이는 레이스 조건 없이도 재현할 수 있습니다:

echo function_graph > /sys/kernel/tracing/current_tracer echo 1 > /sys/kernel/tracing/snapshot echo hwlat > /sys/kernel/tracing/current_tracer cat /sys/kernel/tracing/snapshot

tr->current_trace_flags의 모든 사용자가 이 경계 케이스(case)를 처리하도록 가르치는 대신, 해당 값이 절대 NULL이 되지 않도록 합니다: 새로 선택된 트레이서에 플래그가 전혀 없는 경우 tracing_set_tracer()는 정적 빈 no_tracer_flags로 폴백합니다. run_tracer_selftest()도 동일한 상황을 맞을 수 있으므로 같은 폴백 로직이 거기도 추가됩니다. 기존 사용자들은 이미 opts == NULL인 경우를 처리하고 있으므로, 이러한 트레이서들은 이전과 동일하게 동작합니다.

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-427866

EPSS

0.00000

활동

낮음

출처

Interested in the pricing of exploits?

See the underground prices here!