Re: [RFC PATCH v5 1/2] selftests/x86: sysret_rip: Handle syscall in a FRED system

From: Ammar Faizi
Date: Wed Jan 25 2023 - 05:01:40 EST


On 1/25/23 4:57 PM, Ammar Faizi wrote:
On Wed, Jan 25, 2023 at 12:39:26AM -0800, H. Peter Anvin wrote:
/* Set IP and CX to match so that SYSRET can happen. */
ctx->uc_mcontext.gregs[REG_RIP] = rip;
ctx->uc_mcontext.gregs[REG_RCX] = rip;

It would be interesting to have the syscall handler try both with and
without this (so it would end up doing both IRET and SYSCALL on legacy.)
Perhaps SIGUSR1 versus SIGUSR2...

Just to clarify this more so I am sure I understand it correctly.

Did you mean to have the same signal handler without modifiying
'REG_RCX' but still change 'REG_RIP'?

IOW, we want to only *remove*:

ctx->uc_mcontext.gregs[REG_RCX] = rip;

and *keep*:

ctx->uc_mcontext.gregs[REG_RIP] = rip;

for the SIGUSR2 handler. Thus, inside the entry64 we will jump to the
iret path because %rcx != %r11 upon rt_sigreturn()?

s/%rcx != %r11/%rcx != %rip/

--
Ammar Faizi