linux-stable/tools
Siddhesh Poyarekar 0ee2c886d6 kselftest: Minimise dependency of get_size on C library interfaces
[ Upstream commit 6b64a650f0 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-02-24 08:34:37 +01:00
..
accounting
arch jump_label: move 'asm goto' support test to Kconfig 2019-06-04 08:02:34 +02:00
bpf tools: bpftool: fix format strings and arguments for jsonw_printf() 2020-01-27 14:51:05 +01:00
build perf build: Don't unconditionally link the libbfd feature test to -liberty and -lz 2019-02-12 19:47:16 +01:00
cgroup
firewire
gpio tools: gpio: Correctly add make dependencies for gpio_utils 2019-12-01 09:16:09 +01:00
hv Tools: hv: kvp: eliminate 'may be used uninitialized' warning 2019-09-10 10:33:50 +01:00
iio iio: iio-utils: Fix possible incorrect mask calculation 2019-07-31 07:27:02 +02:00
include tools lib: Fix builds when glibc contains strlcpy() 2020-02-05 14:43:34 +00:00
kvm/kvm_stat tools/kvm_stat: Fix kvm_exit filter name 2020-02-11 04:34:08 -08:00
laptop
leds
lib tools lib traceevent: Fix memory leakage in filter_event 2020-02-05 14:43:41 +00:00
memory-model tools/memory-model: Rename litmus tests to comply to norm7 2018-07-17 09:30:36 +02:00
nfsd
objtool x86/insn: Add some Intel instructions to the opcode map 2019-12-31 16:36:08 +01:00
pci tools: PCI: Fix broken pcitest compilation 2019-11-24 08:21:08 +01:00
pcmcia
perf perf report: Fix no libunwind compiled warning break s390 issue 2020-02-05 14:43:54 +00:00
power tools/power/acpi: fix compilation error 2020-02-14 16:33:25 -05:00
scripts
spi
testing kselftest: Minimise dependency of get_size on C library interfaces 2020-02-24 08:34:37 +01:00
thermal/tmon
time
usb usbip: tools: fix fd leakage in the function of read_attr_usbip_status 2019-12-01 09:17:40 +01:00
virtio virtio: fix test build after uio.h change 2019-01-13 09:51:03 +01:00
vm tools/vm/page-types.c: fix "kpagecount returned fewer pages than expected" failures 2019-12-05 09:20:59 +01:00
wmi
Makefile