🇰🇷 한글 설명
Linux 커널의 RISC-V ftrace 구현에서, AUIPC+JALR 쌍으로 4K를 넘는 주소로 점프할 때 커널 선점(preemption)이 발생하면 문제가 생길 수 있습니다. 태스크가 auipc 실행 중 선점되어 ftrace 함수가 변경되면, 갱신된 하위 비트와 이전 상위 비트가 섞여 잘못된 주소로 점프하여 커널 패닉이 발생할 수 있습니다. 이를 해결하기 위해 패치 중 선점을 비활성화하는 방식으로 수정되었습니다.
💡 쉬운 설명
리눅스 커널이 RISC-V 기기에서 추적(ftrace) 기능을 사용할 때, 작업 전환 타이밍 문제로 잘못된 주소로 점프해 시스템이 멈출 수 있는 결함입니다. 이 문제는 패치를 적용해 해결할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
riscv: ftrace: Fixup panic by disabling preemption
In RISCV, we must use an AUIPC + JALR pair to encode an immediate,
forming a jump that jumps to an address over 4K. This may cause errors
if we want to enable kernel preemption and remove dependency from
patching code with stop_machine(). For example, if a task was switched
out on auipc. And, if we changed the ftrace function before it was
switched back, then it would jump to an address that has updated 11:0
bits mixing with previous XLEN:12 part.
p: patched area performed by dynamic ftrace
ftrace_prologue:
p| REG_S ra, -SZREG(sp)
p| auipc ra, 0x? ------------> preempted
...
change ftrace function
...
p| jalr -?(ra) <------------- switched back
p| REG_L ra, -SZREG(sp)
func:
xxx
ret
📍 영향받는 시스템
RISC-V 아키텍처에서 ftrace 기능과 커널 선점을 사용하는 Linux 커널 (수정 이전 버전)
⚔️ 공격 벡터
직접적인 원격 공격 경로는 명확하지 않으며, 주로 ftrace 함수 변경 시점과 선점이 겹칠 때 발생하는 커널 패닉(서비스 거부) 문제입니다.
🛡️ 대응 방법
커널을 업스트림의 수정 커밋이 포함된 최신 안정 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 Linux 안정 버전 목록과 대조하여 해당 수정이 포함되었는지 확인합니다. 구버전이면 업데이트가 필요합니다.