On Thu, Oct 26, 2023 at 12:40:49PM -0700, Dave Hansen wrote: > On 10/26/23 12:29, Pawan Gupta wrote: > > On Thu, Oct 26, 2023 at 07:25:27PM +0300, Nikolay Borisov wrote: > >> On 25.10.23 г. 23:52 ч., Pawan Gupta wrote: > >>> @@ -1520,6 +1530,7 @@ SYM_CODE_START(ignore_sysret) > >>> UNWIND_HINT_END_OF_STACK > >>> ENDBR > >>> mov $-ENOSYS, %eax > >>> + CLEAR_CPU_BUFFERS > >> nit: Just out of curiosity is it really needed in this case or it's doesn > >> for the sake of uniformity so that all ring3 transitions are indeed > >> covered?? > > Interrupts returning to kernel don't clear the CPU buffers. I believe > > interrupts will be enabled here, and getting an interrupt here could > > leak the data that interrupt touched. > > Specifically NMIs, right? Yes, and VERW can omitted for the same reason as NMI returning to kernel. > X86_EFLAGS_IF should be clear here. I see that SYSCALL has a configuration for IF, but I didn't see it for SYSENTER in the code. But looking at the SDM, it clear IF by default. syscall_init() { ... #else wrmsrl_cstar((unsigned long)ignore_sysret); wrmsrl_safe(MSR_IA32_SYSENTER_CS, (u64)GDT_ENTRY_INVALID_SEG); wrmsrl_safe(MSR_IA32_SYSENTER_ESP, 0ULL); wrmsrl_safe(MSR_IA32_SYSENTER_EIP, 0ULL); #endif /* * Flags to clear on syscall; clear as much as possible * to minimize user space-kernel interference. */ wrmsrl(MSR_SYSCALL_MASK, X86_EFLAGS_CF|X86_EFLAGS_PF|X86_EFLAGS_AF| X86_EFLAGS_ZF|X86_EFLAGS_SF|X86_EFLAGS_TF| X86_EFLAGS_IF|X86_EFLAGS_DF|X86_EFLAGS_OF| X86_EFLAGS_IOPL|X86_EFLAGS_NT|X86_EFLAGS_RF| X86_EFLAGS_AC|X86_EFLAGS_ID);