On 5/23/24 20:27, Alexandre Chartre wrote:
On 5/23/24 19:53, Andrew Cooper wrote:
On 23/05/2024 6:03 pm, Alexandre Chartre wrote:
On 5/23/24 17:36, Dave Hansen wrote:
On 5/23/24 07:52, Alexandre Chartre wrote:
Should we wrap up this gem and put it with the other entry selftests?
It looks like tools/testing/selftests/x86/single_step_syscall.c tests
sysenter with TF set but it doesn't check if the kernel issues any
warning.
Does it actually trip the warning though? I'm a bit surprised that
nobody reported it if so.
single_step_syscall does trigger the warning:
$ ./single_step_syscall
[RUN] Set TF and check nop
[OK] Survived with TF set and 26 traps
[RUN] Set TF and check syscall-less opportunistic sysret
[OK] Survived with TF set and 30 traps
[RUN] Set TF and check a fast syscall
[OK] Survived with TF set and 40 traps
[RUN] Fast syscall with TF cleared
[OK] Nothing unexpected happened
[RUN] Set TF and check SYSENTER
Got SIGSEGV with RIP=ed7fe579, TF=256
[RUN] Fast syscall with TF cleared
[OK] Nothing unexpected happened
:-/
What about the exit code?
I find the absence of a [FAIL] concerning...
$ ./single_step_syscall
[RUN] Set TF and check nop
[OK] Survived with TF set and 26 traps
[RUN] Set TF and check syscall-less opportunistic sysret
[OK] Survived with TF set and 30 traps
[RUN] Set TF and check a fast syscall
[OK] Survived with TF set and 40 traps
[RUN] Fast syscall with TF cleared
[OK] Nothing unexpected happened
[RUN] Set TF and check SYSENTER
Got SIGSEGV with RIP=bb44b579, TF=256
[RUN] Fast syscall with TF cleared
[OK] Nothing unexpected happened
$ echo $?
0
The program runs as expected (but it doesn't expect much than a SIGSEGV).
It triggers a warning from the kernel but it doesn't check if a warning
was produced.
Actually it checks that TF isn't cleared after the sysenter, but that's all.
alex.