Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 593f0060 authored by Neill Kapron's avatar Neill Kapron Committed by Greg Kroah-Hartman
Browse files

selftests/seccomp: fix syscall_restart test for arm compat



[ Upstream commit 797002deed03491215a352ace891749b39741b69 ]

The inconsistencies in the systcall ABI between arm and arm-compat can
can cause a failure in the syscall_restart test due to the logic
attempting to work around the differences. The 'machine' field for an
ARM64 device running in compat mode can report 'armv8l' or 'armv8b'
which matches with the string 'arm' when only examining the first three
characters of the string.

This change adds additional validation to the workaround logic to make
sure we only take the arm path when running natively, not in arm-compat.

Fixes: 256d0afb ("selftests/seccomp: build and pass on arm64")
Signed-off-by: default avatarNeill Kapron <nkapron@google.com>
Link: https://lore.kernel.org/r/20250427094103.3488304-2-nkapron@google.com


Signed-off-by: default avatarKees Cook <kees@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 5c1d85c9
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2875,12 +2875,15 @@ TEST(syscall_restart)
	ret = get_syscall(_metadata, child_pid);
#if defined(__arm__)
	/*
	 * FIXME:
	 * - native ARM registers do NOT expose true syscall.
	 * - compat ARM registers on ARM64 DO expose true syscall.
	 * - values of utsbuf.machine include 'armv8l' or 'armb8b'
	 *   for ARM64 running in compat mode.
	 */
	ASSERT_EQ(0, uname(&utsbuf));
	if (strncmp(utsbuf.machine, "arm", 3) == 0) {
	if ((strncmp(utsbuf.machine, "arm", 3) == 0) &&
	    (strncmp(utsbuf.machine, "armv8l", 6) != 0) &&
	    (strncmp(utsbuf.machine, "armv8b", 6) != 0)) {
		EXPECT_EQ(__NR_nanosleep, ret);
	} else
#endif