Re: [LTP] [PATCH 2/2] kvm: Fix undefined reference to __stack_chk_fail()

Cyril Hrubis
2022-06-08T14:34:25Z

Hi!
> Some x86_64 buildroot toolchains (bootlin-x86-64-glibc,
> bootlin-x86-64-musl) try to link to __stack_chk_fail().
> -nostdlib is not enough, it requires also -fstack-protector.
>
> x86_64-buildroot-linux-gnu/bin/ld: /tmp/ccgBXEoR.o: in function `handle_page_fault':
> kvm_pagefault01.c:(.text+0x5d): undefined reference to `__stack_chk_fail'
> collect2: error: ld returned 1 exit status

I'm still puzzled on why does it try to link it. Why is stack protection
turned on for the code. Does buildroot pass -fstack-protector to the
CFLAGS?

I guess that -nostdlib causes the libssp (which implements
__stack_chk_fail() not to be linked by default, but the
__stack_chk_fail() shouldn't be called unless unless the feature is
enabled in the first place.

Also does -fno-stack-protector passed in GUEST_CFLAGS make it disappear?

> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
> ---
> testcases/kernel/kvm/Makefile | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/testcases/kernel/kvm/Makefile b/testcases/kernel/kvm/Makefile
> index 8d5193d8e..bce1a4eb5 100644
> --- a/testcases/kernel/kvm/Makefile
> +++ b/testcases/kernel/kvm/Makefile
> @@ -9,7 +9,7 @@ ASFLAGS =
> CPPFLAGS += -I$(abs_srcdir)/include
> GUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD
> GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse
> -GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none
> +GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -fstack-protector
> GUEST_LDLIBS =
>
> FILTER_OUT_MAKE_TARGETS := lib_guest lib_host lib_x86
> --
> 2.36.1
>

--
Cyril Hrubis
chrubis@suse.cz