🇰🇷 한글 설명
Linux 커널의 트레이싱 이벤트 필터 파서에서, 논리 연산자로 끝나는 불완전한 표현식(예: 'common_pid == 1 || common_pid == 2 &&')을 처리할 때 미해결 연산자 상태가 남아 범위를 벗어난 메모리(prog[-1])를 읽거나 쓸 수 있는 문제가 있습니다. 커널은 이 경로를 거부하도록 수정되었습니다.
💡 쉬운 설명
리눅스 커널이 미완성된 필터 조건문을 잘못 처리해서 메모리 경계를 넘어 읽거나 쓸 수 있습니다. 수정된 커널에서는 이런 잘못된 입력을 거부합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Reject incomplete event filter expressions
A non-empty expression normally finishes in predicate_parse()'s inner
loop, which resolves the pending logical operators before jumping to
finalization. If the input ends after an operator, possibly followed by
unary '!' tokens, the outer loop instead falls through with unresolved
operator state.
For example, "common_pid == 1 || common_pid == 2 &&" leaves
prog[0].target equal to -1. The second pass then reads prog[-1] before
the forward-jump check can reject it. Depending on adjacent slab
contents, it can also copy an out-of-bounds word into a branch target
that passes the forward-only check. A self-targeted perf tracepoint
counting event can reach this path through PERF_EVENT_IOC_SET_FILTER.
Reject the outer-loop fallthrough when a predicate has already been
parsed. This ensures that non-empty expressions only reach finalization
after the inner loop has resolved their operators. Keep the existing
no-filter error for input that has no predicates. Add a regression test
for trailing logical operators and unary negations.
📍 영향받는 시스템
패치 이전의 Linux 커널 (트레이싱 이벤트 필터 기능 사용 가능한 버전)
⚔️ 공격 벡터
PERF_EVENT_IOC_SET_FILTER를 통해 끝에 논리 연산자가 붙은 잘못된 이벤트 필터 표현식을 전달하여 커널 메모리 손상을 유발
🛡️ 대응 방법
배포판 벤더가 제공하는 최신 Linux 커널 보안 업데이트를 적용하고 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 권고(CVE-2026-99236)에서 패치된 버전과 비교하여, 같거나 높으면 수정됨, 낮으면 업데이트 필요로 판단합니다.