🇰🇷 한글 설명
Linux 커널 BPF kprobe_multi 프로그램의 sleepable flag 검증 누락으로 인해, atomic/RCU 컨텍스트에서 bpf_copy_from_user() 같은 sleepable helper가 호출될 수 있는 취약점. 이는 'sleeping function called from invalid context' 에러를 발생시키며 시스템 불안정성을 초래.
💡 쉬운 설명
Linux 커널에서 특정 BPF 프로그램이 대기 작업을 할 수 없는 상황에서 대기 작업을 시도하는 버그입니다. 프로그램을 로드할 때 사전 검증이 없어서 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Reject sleepable kprobe_multi programs at attach time
kprobe.multi programs run in atomic/RCU context and cannot sleep.
However, bpf_kprobe_multi_link_attach() did not validate whether the
program being attached had the sleepable flag set, allowing sleepable
helpers such as bpf_copy_from_user() to be invoked from a non-sleepable
context.
This causes a "sleeping function called from invalid context" splat:
BUG: sleeping function called from invalid context at ./include/linux/uaccess.h:169
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1787, name: sudo
preempt_count: 1, expected: 0
RCU nest depth: 2, expected: 0
Fix this by rejecting sleepable programs early in
bpf_kprobe_multi_link_attach(), before any further processing.
📍 영향받는 시스템
Linux 커널 (BPF kprobe_multi 기능 사용하는 모든 배포판)
⚔️ 공격 벡터
로컬 권한 사용자가 sleepable flag가 설정된 BPF 프로그램을 로드하여 커널 panic이나 메모리 corruption 유발
🛡️ 대응 방법
Linux 커널을 패치된 버전으로 업데이트 (bpf_kprobe_multi_link_attach()에서 sleepable 프로그램 거부 로직 추가)
🔧 검증 코드
현재 커널 버전 확인. 취약한 버전은 bpf_kprobe_multi_link_attach() 함수에서 sleepable flag 검증 로직이 없음
uname -r && cat /proc/version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'