linux_dsm_epyc7002/tools/testing/selftests
Siddhesh Poyarekar 6b64a650f0 kselftest: Minimise dependency of get_size on C library interfaces
It was observed[1] on arm64 that __builtin_strlen led to an infinite
loop in the get_size selftest.  This is because __builtin_strlen (and
other builtins) may sometimes result in a call to the C library
function.  The C library implementation of strlen uses an IFUNC
resolver to load the most efficient strlen implementation for the
underlying machine and hence has a PLT indirection even for static
binaries.  Because this binary avoids the C library startup routines,
the PLT initialization never happens and hence the program gets stuck
in an infinite loop.

On x86_64 the __builtin_strlen just happens to expand inline and avoid
the call but that is not always guaranteed.

Further, while testing on x86_64 (Fedora 31), it was observed that the
test also failed with a segfault inside write() because the generated
code for the write function in glibc seems to access TLS before the
syscall (probably due to the cancellation point check) and fails
because TLS is not initialised.

To mitigate these problems, this patch reduces the interface with the
C library to just the syscall function.  The syscall function still
sets errno on failure, which is undesirable but for now it only
affects cases where syscalls fail.

[1] https://bugs.linaro.org/show_bug.cgi?id=5479

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
Reported-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Tim Bird <tim.bird@sony.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
2020-01-16 13:08:26 -07:00
..
android treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
arm64 kselftest: arm64: fix spelling mistake "contiguos" -> "contiguous" 2019-11-11 18:25:24 +00:00
bpf libbpf: Fix build on read-only filesystems 2019-12-23 15:34:06 +01:00
breakpoints selftests: breakpoints: Fix a typo of function name 2019-11-07 14:27:26 -07:00
capabilities
cgroup selftests: Uninitialized variable in test_cgcore_proc_migration() 2020-01-09 16:21:23 -07:00
clone3 selftests/clone3: skip if clone3() is ENOSYS 2019-11-18 08:59:03 +01:00
cpu-hotplug
cpufreq
drivers selftests: mlxsw: Check devlink device before running test 2019-11-18 17:11:54 -08:00
efivarfs treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
exec treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
filesystems selftests: filesystems/epoll: fix build error 2019-12-23 10:52:40 -07:00
firmware selftests: firmware: Fix it to do root uid check and skip 2019-12-23 10:52:40 -07:00
ftrace selftests/ftrace: Fix multiple kprobe testcase 2019-12-09 10:53:04 -07:00
futex treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
gpio treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ia64 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
intel_pstate
ipc
ir media: selftests: ir: fix ir_loopback test failure 2019-08-14 05:06:25 -03:00
kcmp treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
kexec sefltest/ima: support appended signatures (modsig) 2019-08-29 12:45:30 -04:00
kmod selftests: kmod: Fix typo in kmod.sh 2019-07-23 10:45:06 -06:00
kselftest kselftest: Support old perl versions 2019-12-11 10:31:16 -07:00
kvm Merge branch 'kvm-tsx-ctrl' into HEAD 2019-11-21 12:03:40 +01:00
lib selftests: Move kselftest_module.sh into kselftest/ 2019-11-07 14:46:08 -07:00
livepatch selftests/livepatch: Remove unused local variable in set_ftrace_enabled() 2020-01-16 13:05:49 -07:00
lkdtm selftests/lkdtm: Add tests for LKDTM targets 2020-01-10 14:50:28 -07:00
locking
media_tests
membarrier selftests, sched/membarrier: Add multi-threaded test 2019-09-25 17:42:31 +02:00
memfd memfd: add test for COW on MAP_PRIVATE and F_SEAL_FUTURE_WRITE mappings 2019-12-01 12:59:03 -08:00
memory-hotplug
mount
mqueue
net selftests: pmtu: fix init mtu value in description 2019-12-20 21:52:21 -08:00
netfilter selftests: netfilter: extend flowtable test script with dnat rule 2019-12-20 02:12:27 +01:00
networking/timestamping selftests: timestamping: Fix SIOCGSTAMP undeclared build failure 2019-06-28 14:31:12 -06:00
nsfs treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
ntb New feature to add support for NTB virtual MSI interrupts, the ability 2019-07-21 09:46:59 -07:00
pidfd test: verify fdinfo for pidfd of reaped process 2019-10-17 15:36:54 +02:00
powerpc selftests/powerpc: spectre_v2 test must be built 64-bit 2019-11-21 15:41:39 +11:00
prctl
proc selftests: proc: Make va_max 1MB 2019-11-07 14:52:57 -07:00
pstore treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 472 2019-06-19 17:09:11 +02:00
ptp ptp: Extend the test program to check the external time stamp flags. 2019-11-15 12:48:33 -08:00
ptrace selftests/ptrace: add a test case for PTRACE_GET_SYSCALL_INFO 2019-07-16 19:23:24 -07:00
rcutorture rcutorture: Remove CONFIG_HOTPLUG_CPU=n from scenarios 2019-10-05 11:49:13 -07:00
rseq rseq/selftests: Clarify rseq_prepare_unload() helper requirements 2019-12-23 10:52:41 -07:00
rtc selftests/kselftest/runner.sh: Add 45 second timeout per test 2019-10-01 13:33:28 -06:00
safesetid selftests: safesetid: Fix Makefile to set correct test program 2019-12-09 10:53:04 -07:00
seccomp selftests/seccomp: Catch garbage on SECCOMP_IOCTL_NOTIF_RECV 2020-01-02 13:15:45 -08:00
sigaltstack treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
size kselftest: Minimise dependency of get_size on C library interfaces 2020-01-16 13:08:26 -07:00
sparc64
splice
static_keys treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
sync selftests: sync: Fix cast warnings on arm 2019-11-07 14:54:37 -07:00
sysctl treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
tc-testing tc-testing: initial tdc selftests for cls_u32 2019-12-19 17:53:05 -08:00
timers kselftests: timers: freq-step: Update maximum acceptable precision and errors 2019-06-22 11:28:53 +02:00
tmpfs treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
tpm2 tpm: selftest: cleanup after unseal with wrong auth/policy test 2019-12-17 12:20:15 +02:00
uevent
user treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
vDSO treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 180 2019-05-30 11:29:20 -07:00
vm selftests: vm: add fragment CONFIG_TEST_VMALLOC 2019-12-01 12:59:05 -08:00
watchdog selftests: watchdog: Add command line option to show watchdog_info 2019-10-02 13:44:43 -06:00
x86 selftests/x86/single_step_syscall: Check SYSENTER directly 2019-11-26 21:53:34 +01:00
zram docs: blockdev: add it to the admin-guide 2019-07-15 11:03:01 -03:00
.gitignore selftests/tpm2: Add log and *.pyc to .gitignore 2019-09-25 02:43:51 +03:00
gen_kselftest_tar.sh selftests: gen_kselftest_tar.sh: Do not clobber kselftest/ 2019-11-07 14:43:27 -07:00
kselftest_harness.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 481 2019-06-19 17:09:51 +02:00
kselftest_install.sh selftests: gen_kselftest_tar.sh: Do not clobber kselftest/ 2019-11-07 14:43:27 -07:00
kselftest_module.h
kselftest.h kselftest: save-and-restore errno to allow for %m formatting 2019-07-30 15:46:48 -06:00
lib.mk kbuild: replace KBUILD_SRCTREE with boolean building_out_of_srctree 2019-07-11 00:05:09 +09:00
Makefile selftests/lkdtm: Add tests for LKDTM targets 2020-01-10 14:50:28 -07:00