CVE-2026-98396 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 15.

리눅스 커널에서 다음 취약점이 해결되었습니다:

powerpc: arch_exit_to_user_mode_prepare()에서 KUAP를 복원하지 않음

KUAP는 커널이 명시적으로 활성화되지 않는 한 사용자 메모리에 접근할 수 없음을 의미합니다. 커널 내부에서는 AMR_KUAP_BLOCKED 상태가 유지되어야 합니다. RFI 직전, 즉 사용자로 반환하기 전에 커널은 사용자 AMR 값을 원래대로 복원해야 합니다.

GENERIC_ENTRY는 arch_exit_to_user_mode_prepare()를 사용 공간으로 반환하기 전의 마지막 아키텍처 단계로 처리하는 것 같습니다. commit bee25f97ad24 ("powerpc: Enable GENERIC_ENTRY feature")에서는 해당 훅(hook)에서 kuap_user_restore()를 호출했습니다. 그러나 PowerPC 플랫폼에서는 이것이 너무 이른 시점입니다. irqentry_exit() / syscall_exit_to_user_mode() 이후에도 우리는 플랫폼별 종료 루틴을 여전히 실행합니다.

예를 들어, exception handling과 system call 처리 모두 arch_exit_to_user_mode_prepare() 함수의 호출자로서 kuap_user_restore()를 수행하는 코드 스니펫이 있습니다. 아래 경로에서 알 수 있듯이, arch_exit_to_user_mode_prepare()로부터 kuap_user_restore()가 호출될 때는 너무 이른 시점입니다.

exceptions-64s.S에서의 예외 처리 =======================================

bl CFUNC(do_page_fault) ..DEFINE_INTERRUPT_HANDLER_ASYNC(do_page_fault) arch_interrupt_async_enter_prepare(regs); state = irqentry_enter(regs); instrumentation_begin(); irq_enter_rcu(); handler(regs); nap_adjust_return(regs); irq_exit_rcu(); instrumentation_end(); arch_interrupt_async_exit_prepare(regs); irqentry_exit(regs, state); <<< 너무 이른 시점 irqentry_exit_to_user_mode() __exit_to_user_mode_prepare(regs, EXIT_TO_USER_MODE_WORK_IRQ); arch_exit_to_user_mode_prepare(regs, ti_work); <<< 너무 이른 시점 b interrupt_return_srr .. bl CFUNC(interrupt_exit_user_prepare) <<< 이미 kuap_user_restore()를 호출함

prep_irq_for_enabled_exit()의 재시도는 IRQ가 활성화된 상태에서 커널 코드를 실행할 수 있습니다. 따라서 해당 루틴이 완전히 종료될 때만 사용자 KUAP가 완전히 복원되어야 하며, 이는 interrupt_exit_user_prepare()에서 반환 전에 이미 처리하고 있는 사항입니다.

마찬가지로 interrupt_64.S에서의 시스템 콜 처리도 동일합니다 ======================================================

bl CFUNC(system_call_exception)

.Lsyscall_exit: addi r4,r1,STACK_INT_FRAME_REGS li r5,0 /* !scv */ bl CFUNC(syscall_exit_prepare) .. kuap_assert_locked(); syscall_exit_to_user_mode(regs); <<< 너무 이른 시점 syscall_exit_to_user_mode_prepare(regs); <<< 너무 이른 시점 kuap_user_restore(regs); <<< 이미 호출함

syscall_exit_prepare()는 IRQ를 활성화하고, 보류 중인 인터럽트를 재실행한 후 rfi를 수행할 수 있습니다. 이러한 함수들은 rfi 직전에 KUAP를 즉시 복원합니다.

현재 코드에서 보여주는 바와 같이 사용자 AMR을 너무 이른 시점에 복원하면(위 코드 스니펫 참조), CONFIG_PPC_KUAP_DEBUG가 활성화되었을 때 다음과 같은 경고 메시지가 발생합니다: WARNING: arch/powerpc/include/asm/book3s/64/kup.h:293 at interrupt_exit_user_prepare+0x1a0/0x1c0 Hardware name: IBM pSeries (emulated by qemu) POWER10 (architected) TRAP: 0700 LR: c00000000000d8d4 CTR: c0000000021fe500 MSR: <SF,EE,ME,IR,DR,RI,LE> CR: 44000804 XER: 20040000 interrupt_exit_user_prepare+0x1a0/0x1c0 interrupt_return_srr_user+0x8/0x12c

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-419838

EPSS

0.00000

출처

Interested in the pricing of exploits?

See the underground prices here!