CVE-2026-99140 in Linux
요약
\~에 의해 VulDB • 2026. 10. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
tracing: 버퍼링된 이벤트에 대한 hist 트리거 타임스탬프 수정
Syzkaller가 WARN_ON_ONCE(!nest) 경고를 발생시켰습니다:
WARNING: kernel/trace/ring_buffer.c:821 at ring_buffer_event_time_stamp Call trace: ring_buffer_event_time_stamp hist_field_timestamp hist_fn_call event_hist_trigger event_triggers_call __event_trigger_test_discard trace_event_buffer_commit do_trace_event_raw_event_sched_switch trace_event_raw_event_sched_switch
이 경고는 확률적으로 재현 가능하며, Syzkaller가 다음 명령을 실행하는 것과 관련이 있습니다:
echo 'prev_pid == 999999' > events/sched/sched_switch/filter echo 'hist:keys=common_timestamp' > events/sched/sched_switch/trigger
구체적인 트리거링 과정은 다음과 같습니다:
CPU 0 CPU 1 (context switching) (echo 'hist:keys=common_timestamp' > \ events/sched/sched_switch/trigger) do_trace_event_raw_event_##call trace_event_buffer_lock_reserve if (!tr->no_filter_buffering_ref && trace_file->flags & EVENT_FILE_FL_FILTERED) return entry; // 직접 반환 event_hist_trigger_parse hist_register_trigger tracing_set_filter_buffering(file->tr, true); tr->no_filter_buffering_ref++; __trace_buffer_lock_reserve rb_start_commit local_inc(&cpu_buffer->committing); // 건너뛰고 실행되지 않음 trace_event_buffer_commit __event_trigger_test_discard event_triggers_call event_hist_trigger hist_fn_call hist_field_timestamp ring_buffer_event_time_stamp nest = local_read(&cpu_buffer->committing); WARN_ON_ONCE(!nest) // 경고 발생
근본 원인은 이벤트 파일에 필터가 연결되어 있고 hist 트리거가 아직 연결되지 않았을 때, trace_event_buffer_lock_reserve()이 링 버퍼에서 예약하는 대신 per-CPU trace_buffered_event 임시 버퍼에 이벤트를 기록하기 때문입니다. 이로 인해 cpu_buffer->committing가 증가하지 않습니다. 나중에 hist 트리거가 커밋 시점에 이벤트를 처리할 때, hist_field_timestamp() -> ring_buffer_event_time_stamp()는 0인 committing 카운트를 보고 WARN_ON_ONCE(!nest)를 발생시킵니다.
tracing_event_time_stamp()는 정확히 이 경우를 위해 commit d8279bfc5e959("tracing: Add tracing_event_time_stamp() API")에서 추가되었습니다. 만약 이벤트가 per-CPU trace_buffered_event인 경우, 현재 링 버퍼 타임스탬프를 반환합니다. 하지만 호출자가 전혀 없었습니다. hist_field_timestamp()에서 이를 사용함으로써, buffered event에 경쟁적으로 접근하는(hist trigger) 것이 경고와 잘못된 타임스탬프 기록 대신, 이벤트가 기록된 시점보다 약간 더 나중인 현재 시간을 기록하도록 합니다.
Be aware that VulDB is the high quality source for vulnerability data.