kselftest: sigaltstack built with clang-16 getting failed but passed with gcc-12 build. Please find more details about test logs on clang-16 and gcc-12 and steps to reproduce locally on your machine by using tuxrun.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Test log: ----------
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20230228093516+60692a66ced6-1~exp1~20230228093525.41), Debian LLD 16.0.0) #1 SMP PREEMPT @1678159722 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 21104 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # Bail out! SP is not on sigaltstack # # Planned tests != run tests (3 != 1) # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 not ok 1 selftests: sigaltstack: sas # exit=1
Links, qemu-x86_64: - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes...
qemu-arm64: - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes... - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes...
kselftest: sigaltstack built with gcc-12 getting pass.
Test log: --------- Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT @1678159736 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 50080 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # # [RUN] signal USR1 # ok 2 sigaltstack is disabled in sighandler # # [RUN] switched to user ctx # # [RUN] signal USR2 # # [OK] Stack preserved # ok 3 sigaltstack is still SS_AUTODISARM after signal # # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0 ok 1 selftests: sigaltstack: sas
Links, qemu-x86_64: - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes...
qemu-arm64: - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes... - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20230307/tes...
Steps to reproduce: --------------
# To install tuxrun on your system globally: # sudo pip3 install -U tuxrun==0.37.2 # # See https://tuxrun.org/ for complete documentation.
tuxrun \ --runtime podman \ --device qemu-x86_64 \ --boot-args rw \ --kernel https://storage.tuxsuite.com/public/linaro/lkft/builds/2MfXLbLsvBufVn1MrsnXV... \ --modules https://storage.tuxsuite.com/public/linaro/lkft/builds/2MfXLbLsvBufVn1MrsnXV... \ --rootfs https://storage.tuxboot.com/debian/bookworm/amd64/rootfs.ext4.xz \ --parameters SKIPFILE=skipfile-lkft.yaml \ --parameters KSELFTEST=https://storage.tuxsuite.com/public/linaro/lkft/builds/2MfXLbLsvBufVn1MrsnXV... \ --image docker.io/lavasoftware/lava-dispatcher:2023.01.0020.gc1598238f \ --tests kselftest-sigaltstack \ --timeouts boot=15
-- Linaro LKFT https://lkft.linaro.org
On 3/6/2023 10:57 PM, Naresh Kamboju wrote:
kselftest: sigaltstack built with clang-16 getting failed but passed with gcc-12 build. Please find more details about test logs on clang-16 and gcc-12 and steps to reproduce locally on your machine by using tuxrun.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Test log:
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20230228093516+60692a66ced6-1~exp1~20230228093525.41), Debian LLD 16.0.0) #1 SMP PREEMPT @1678159722 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 21104 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # Bail out! SP is not on sigaltstack # # Planned tests != run tests (3 != 1) # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 not ok 1 selftests: sigaltstack: sas # exit=1
<snip>
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT @1678159736 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 50080 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # # [RUN] signal USR1 # ok 2 sigaltstack is disabled in sighandler # # [RUN] switched to user ctx # # [RUN] signal USR2 # # [OK] Stack preserved # ok 3 sigaltstack is still SS_AUTODISARM after signal # # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0 ok 1 selftests: sigaltstack: sas
At glance, the log shows the altstack size difference between LLVM and GCC.
But, when I tried with the LLVM that I have,
$ clang --version clang version 13.0.0 ...
it failed only with this compiler:
$ rm sas;clang -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE Bail out! SP is not on sigaltstack # Planned tests != run tests (3 != 1) # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0
$ rm sas;gcc -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE # [RUN] signal USR1 ok 2 sigaltstack is disabled in sighandler # [RUN] switched to user ctx # [RUN] signal USR2 # [OK] Stack preserved ok 3 sigaltstack is still SS_AUTODISARM after signal # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
The same is true with some old versions -- e.g. the one that came with commit 0c49ad415512 ("tools/testing/selftests/sigaltstack/sas.c: improve output of sigaltstack testcase"):
$ rm sas;clang -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [FAIL] SP is not on sigaltstack
$ rm sas;gcc -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [RUN] signal USR1 [OK] sigaltstack is disabled in sighandler [RUN] switched to user ctx [RUN] signal USR2 [OK] Stack preserved [OK] sigaltstack is still SS_AUTODISARM after signal [OK] Test passed
So, this test failure appears to have been there for a while. I think the LLVM folks need to take a look at it.
Thanks, Chang
+ LLVM
On Wed, 8 Mar 2023 at 00:58, Chang S. Bae chang.seok.bae@intel.com wrote:
On 3/6/2023 10:57 PM, Naresh Kamboju wrote:
kselftest: sigaltstack built with clang-16 getting failed but passed with gcc-12 build. Please find more details about test logs on clang-16 and gcc-12 and steps to reproduce locally on your machine by using tuxrun.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Test log:
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20230228093516+60692a66ced6-1~exp1~20230228093525.41), Debian LLD 16.0.0) #1 SMP PREEMPT @1678159722 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 21104 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # Bail out! SP is not on sigaltstack # # Planned tests != run tests (3 != 1) # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 not ok 1 selftests: sigaltstack: sas # exit=1
<snip>
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT @1678159736 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 50080 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # # [RUN] signal USR1 # ok 2 sigaltstack is disabled in sighandler # # [RUN] switched to user ctx # # [RUN] signal USR2 # # [OK] Stack preserved # ok 3 sigaltstack is still SS_AUTODISARM after signal # # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0 ok 1 selftests: sigaltstack: sas
At glance, the log shows the altstack size difference between LLVM and GCC.
But, when I tried with the LLVM that I have,
$ clang --version clang version 13.0.0 ...
it failed only with this compiler:
$ rm sas;clang -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE Bail out! SP is not on sigaltstack # Planned tests != run tests (3 != 1) # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 $ rm sas;gcc -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE # [RUN] signal USR1 ok 2 sigaltstack is disabled in sighandler # [RUN] switched to user ctx # [RUN] signal USR2 # [OK] Stack preserved ok 3 sigaltstack is still SS_AUTODISARM after signal # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
The same is true with some old versions -- e.g. the one that came with commit 0c49ad415512 ("tools/testing/selftests/sigaltstack/sas.c: improve output of sigaltstack testcase"):
$ rm sas;clang -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [FAIL] SP is not on sigaltstack $ rm sas;gcc -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [RUN] signal USR1 [OK] sigaltstack is disabled in sighandler [RUN] switched to user ctx [RUN] signal USR2 [OK] Stack preserved [OK] sigaltstack is still SS_AUTODISARM after signal [OK] Test passed
So, this test failure appears to have been there for a while. I think the LLVM folks need to take a look at it.
Thanks, Chang
On Tue, Mar 7, 2023 at 7:14 PM Naresh Kamboju naresh.kamboju@linaro.org wrote:
- LLVM
The offending code seems to be:
#if __s390x__ register unsigned long sp asm("%15"); #else register unsigned long sp asm("sp"); #endif
if (sp < (unsigned long)sstack || sp >= (unsigned long)sstack + stack_size) { ksft_exit_fail_msg("SP is not on sigaltstack\n"); }
Is that actually expected to work? asm("sp") is a horrible hack. I would, maybe naively, expect a compiler to analyze this code, think "sp is unconditionally uninitialized", and treat the comparison as always-UB and thus generate whatever code seems convenient.
--Andy
On Wed, 8 Mar 2023 at 00:58, Chang S. Bae chang.seok.bae@intel.com wrote:
On 3/6/2023 10:57 PM, Naresh Kamboju wrote:
kselftest: sigaltstack built with clang-16 getting failed but passed with gcc-12 build. Please find more details about test logs on clang-16 and gcc-12 and steps to reproduce locally on your machine by using tuxrun.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Test log:
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20230228093516+60692a66ced6-1~exp1~20230228093525.41), Debian LLD 16.0.0) #1 SMP PREEMPT @1678159722 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 21104 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # Bail out! SP is not on sigaltstack # # Planned tests != run tests (3 != 1) # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 not ok 1 selftests: sigaltstack: sas # exit=1
<snip>
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT @1678159736 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 50080 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # # [RUN] signal USR1 # ok 2 sigaltstack is disabled in sighandler # # [RUN] switched to user ctx # # [RUN] signal USR2 # # [OK] Stack preserved # ok 3 sigaltstack is still SS_AUTODISARM after signal # # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0 ok 1 selftests: sigaltstack: sas
At glance, the log shows the altstack size difference between LLVM and GCC.
But, when I tried with the LLVM that I have,
$ clang --version clang version 13.0.0 ...
it failed only with this compiler:
$ rm sas;clang -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE Bail out! SP is not on sigaltstack # Planned tests != run tests (3 != 1) # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 $ rm sas;gcc -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE # [RUN] signal USR1 ok 2 sigaltstack is disabled in sighandler # [RUN] switched to user ctx # [RUN] signal USR2 # [OK] Stack preserved ok 3 sigaltstack is still SS_AUTODISARM after signal # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
The same is true with some old versions -- e.g. the one that came with commit 0c49ad415512 ("tools/testing/selftests/sigaltstack/sas.c: improve output of sigaltstack testcase"):
$ rm sas;clang -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [FAIL] SP is not on sigaltstack $ rm sas;gcc -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [RUN] signal USR1 [OK] sigaltstack is disabled in sighandler [RUN] switched to user ctx [RUN] signal USR2 [OK] Stack preserved [OK] sigaltstack is still SS_AUTODISARM after signal [OK] Test passed
So, this test failure appears to have been there for a while. I think the LLVM folks need to take a look at it.
Thanks, Chang
On Wed, Mar 8, 2023 at 8:23 AM Andy Lutomirski luto@kernel.org wrote:
On Tue, Mar 7, 2023 at 7:14 PM Naresh Kamboju naresh.kamboju@linaro.org wrote:
- LLVM
The offending code seems to be:
#if __s390x__ register unsigned long sp asm("%15"); #else register unsigned long sp asm("sp"); #endif
if (sp < (unsigned long)sstack || sp >= (unsigned long)sstack + stack_size) { ksft_exit_fail_msg("SP is not on sigaltstack\n"); }
Is that actually expected to work? asm("sp") is a horrible hack. I would, maybe naively, expect a compiler to analyze this code, think "sp is unconditionally uninitialized", and treat the comparison as always-UB and thus generate whatever code seems convenient.
Spot-on. -Wuninitialized should warn about that. https://godbolt.org/z/do9Kqa3cG
Kees mentioned we should be using `current_stack_pointer`. I'll whip up a patch using that.
--Andy
On Wed, 8 Mar 2023 at 00:58, Chang S. Bae chang.seok.bae@intel.com wrote:
On 3/6/2023 10:57 PM, Naresh Kamboju wrote:
kselftest: sigaltstack built with clang-16 getting failed but passed with gcc-12 build. Please find more details about test logs on clang-16 and gcc-12 and steps to reproduce locally on your machine by using tuxrun.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Test log:
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20230228093516+60692a66ced6-1~exp1~20230228093525.41), Debian LLD 16.0.0) #1 SMP PREEMPT @1678159722 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 21104 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # Bail out! SP is not on sigaltstack # # Planned tests != run tests (3 != 1) # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 not ok 1 selftests: sigaltstack: sas # exit=1
<snip>
Linux version 6.3.0-rc1-next-20230307 (tuxmake@tuxmake) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT @1678159736 ... kselftest: Running tests in sigaltstack TAP version 13 1..1 # selftests: sigaltstack: sas # # [NOTE] the stack size is 50080 # TAP version 13 # 1..3 # ok 1 Initial sigaltstack state was SS_DISABLE # # [RUN] signal USR1 # ok 2 sigaltstack is disabled in sighandler # # [RUN] switched to user ctx # # [RUN] signal USR2 # # [OK] Stack preserved # ok 3 sigaltstack is still SS_AUTODISARM after signal # # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0 ok 1 selftests: sigaltstack: sas
At glance, the log shows the altstack size difference between LLVM and GCC.
But, when I tried with the LLVM that I have,
$ clang --version clang version 13.0.0 ...
it failed only with this compiler:
$ rm sas;clang -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE Bail out! SP is not on sigaltstack # Planned tests != run tests (3 != 1) # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 $ rm sas;gcc -o sas sas.c;./sas # [NOTE] the stack size is 8192 TAP version 13 1..3 ok 1 Initial sigaltstack state was SS_DISABLE # [RUN] signal USR1 ok 2 sigaltstack is disabled in sighandler # [RUN] switched to user ctx # [RUN] signal USR2 # [OK] Stack preserved ok 3 sigaltstack is still SS_AUTODISARM after signal # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
The same is true with some old versions -- e.g. the one that came with commit 0c49ad415512 ("tools/testing/selftests/sigaltstack/sas.c: improve output of sigaltstack testcase"):
$ rm sas;clang -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [FAIL] SP is not on sigaltstack $ rm sas;gcc -o sas sas.c;./sas [OK] Initial sigaltstack state was SS_DISABLE [RUN] signal USR1 [OK] sigaltstack is disabled in sighandler [RUN] switched to user ctx [RUN] signal USR2 [OK] Stack preserved [OK] sigaltstack is still SS_AUTODISARM after signal [OK] Test passed
So, this test failure appears to have been there for a while. I think the LLVM folks need to take a look at it.
Thanks, Chang
linux-kselftest-mirror@lists.linaro.org