Skip to content

Commit e4e8e5d

Browse files
committed
selftests/seccomp: Avoid redundant register flushes
When none of the registers have changed, don't flush them back. This can happen if the architecture uses a non-register way to change the syscall (e.g. arm64) , and a return value hasn't been written. Signed-off-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/lkml/20200912110820.597135-11-keescook@chromium.org Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
1 parent dc2ad16 commit e4e8e5d

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

tools/testing/selftests/seccomp/seccomp_bpf.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,11 +1859,12 @@ int get_syscall(struct __test_metadata *_metadata, pid_t tracee)
18591859
void change_syscall(struct __test_metadata *_metadata,
18601860
pid_t tracee, int syscall, int result)
18611861
{
1862-
ARCH_REGS regs;
1862+
ARCH_REGS orig, regs;
18631863

18641864
EXPECT_EQ(0, ARCH_GETREGS(regs)) {
18651865
return;
18661866
}
1867+
orig = regs;
18671868

18681869
SYSCALL_NUM_SET(regs, syscall);
18691870

@@ -1876,7 +1877,8 @@ void change_syscall(struct __test_metadata *_metadata,
18761877
#endif
18771878

18781879
/* Flush any register changes made. */
1879-
EXPECT_EQ(0, ARCH_SETREGS(regs));
1880+
if (memcmp(&orig, &regs, sizeof(orig)) != 0)
1881+
EXPECT_EQ(0, ARCH_SETREGS(regs));
18801882
}
18811883

18821884
void tracer_seccomp(struct __test_metadata *_metadata, pid_t tracee,

0 commit comments

Comments
 (0)