🇰🇷 한글 설명
Linux 커널 BPF(Berkeley Packet Filter) JIT 컴파일 실패 시 오류 처리 로직의 결함. CONFIG_BPF_JIT_ALWAYS_ON 미설정 상태에서 JIT 컴파일이 실패해도 프로그램을 유효하다고 잘못 판단하여 실행 시 경고 발생 및 커널 불안정성 유발.
💡 쉬운 설명
Linux 커널이 BPF 프로그램을 실행할 때 빠른 컴파일(JIT) 실패를 제대로 처리하지 못해 잘못된 동작이 발생합니다. 로컬 공격자가 특수 제작한 BPF 프로그램으로 커널을 충돌시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Avoid __bpf_prog_ret0_warn when jit fails
syzkaller reported an issue:
WARNING: CPU: 3 PID: 217 at kernel/bpf/core.c:2357 __bpf_prog_ret0_warn+0xa/0x20 kernel/bpf/core.c:2357
Modules linked in:
CPU: 3 UID: 0 PID: 217 Comm: kworker/u32:6 Not tainted 6.15.0-rc4-syzkaller-00040-g8bac8898fe39
RIP: 0010:__bpf_prog_ret0_warn+0xa/0x20 kernel/bpf/core.c:2357
Call Trace:
<TASK>
bpf_dispatcher_nop_func include/linux/bpf.h:1316 [inline]
__bpf_prog_run include/linux/filter.h:718 [inline]
bpf_prog_run include/linux/filter.h:725 [inline]
cls_bpf_classify+0x74a/0x1110 net/sched/cls_bpf.c:105
...
When creating bpf program, 'fp->jit_requested' depends on bpf_jit_enable.
This issue is triggered because of CONFIG_BPF_JIT_ALWAYS_ON is not set
and bpf_jit_enable is set to 1, causing the arch to attempt JIT the prog,
but jit failed due to FAULT_INJECTION. As a result, incorrectly
treats the program as valid, when the program runs it calls
`__bpf_prog_ret0_warn` and triggers the WARN_ON_ONCE(1).
📍 영향받는 시스템
Linux kernel 6.15.0-rc4 이전 버전에서 CONFIG_BPF_JIT_ALWAYS_ON 미설정 및 bpf_jit_enable=1 설정 시
⚔️ 공격 벡터
로컬 공격자가 BPF 프로그램을 로드할 수 있는 권한으로 특수 제작된 프로그램 실행
🛡️ 대응 방법
Linux 커널을 최신 패치 버전으로 업그레이드 또는 CONFIG_BPF_JIT_ALWAYS_ON 설정 활성화
🔧 검증 코드
커널 버전이 영향받는 범위에 해당하면 패치 적용 필요. 버전이 6.15.0-rc4 이후이거나 6.16 이상이면 안전
uname -r | grep -E '6\.(1[0-4]\.|15\.0-rc[0-3])'