Re: [PATCHv6 07/16] x86/vsyscall: Reorganize the #PF emulation code

From: Andrew Cooper
Date: Mon Jun 23 2025 - 11:52:19 EST


On 23/06/2025 4:32 pm, Dave Hansen wrote:
> On 6/23/25 05:41, Kirill A. Shutemov wrote:
>> So, IIUC, that's dependency of vsyscall PF on NX. Do we want to disable
>> vsyscall on boot if NX is not available?
> Well, vsyscall=none can break old userspace, so forcing it on old
> hardware doesn't seem like a great idea.
>
> But, either way, this doesn't really appear to be a LASS issue. This code:
>
>> if (!(error_code & X86_PF_INSTR)) {
>> /* Failed vsyscall read */
>> if (vsyscall_mode == EMULATE)
>> return false;
> Is really asking the question:
>
> Is this #PF from an instruction fetch in the vsyscall page?
>
> That _should_ be able to be done by comparing CR2 and regs->rip. In
> fact, that's done just below anyway:
>
> WARN_ON_ONCE(address != regs->ip);
>
> So I think we can fix this up with something like the attached patch
> which just drives the if() from regs->rip and make the warning NX-only.

Yeah, that looks good.  Furthermore, it means that the LASS #GP path
(patch 9) will be consistent with this path.  (i.e. both doing a
regs->rip check.)

Patch Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> if that
counts for anything.

~Andrew