Re: New vsyscall emulation breaks JITs

From: H. Peter Anvin
Date: Fri Aug 05 2011 - 18:07:32 EST


On 08/05/2011 02:26 PM, Andrew Lutomirski wrote:
>
> For a boot time switch, it might be nicer to just switch between the
> current int 0xcc sequence and the older
>
> mov cx, 0x<magic>
> int 0xcc
> ret
>
> sequence.
>
> That way there's a ret in the vsyscall page but no syscall instruction.
>

Refresh my memory... we have what... six legacy vsyscall entry points?
We could, hypothetically, burn six interrupt vectors with them. If we
get them from the 0x40-0x4f range, then they are harmless standalone REX
prefixes (and INC/DEC instructions in 32-bit mode.)

The issue with pin as far as I understand is that it's executing an
instruction at a different address and expecting it to have identical
semantics, which is an incorrect assumption for trapping instructions
(consider doing that for something like SYSENTER!).

Now, as far as RET is concerned I don't see how it does anything that
the INT instruction doesn't do already; ANY of the emulated instructions
have to return to the address on the stack in order to work at all, OR
they can return to the next address and do RET.

-hpa
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/