Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 927013 - net-vpn/tor-0.4.8.10: fails tests with sys-devel/gcc-14 and -O2 -mavx -fno-vect-cost-model
Summary: net-vpn/tor-0.4.8.10: fails tests with sys-devel/gcc-14 and -O2 -mavx -fno-ve...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo Toolchain Maintainers
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: gcc-14
  Show dependency tree
 
Reported: 2024-03-14 09:51 UTC by Sam James
Modified: 2024-03-18 04:45 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 09:51:45 UTC
Filing to dump notes in as I go.

```
./configure CFLAGS="-O3 -march=znver2 -ggdb3 -fno-vect-cost-model" --enable-all-bugs-are-fatal --disable-html-manual --disable-manpage --disable-asciidoc --disable-memory-sentinels --disable-linker-hardening --disable-seccomp --disable-libscrypt --disable-module-relay --disable-module-dirauth --disable-module-pow && make -j$(nproc)
[...]

src/test $ ./test --verbose entrynodes/node_filter
entrynodes/node_filter: [forking]
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:989: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:990: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:992: assert(num_reachable_filtered_guards(gs, NULL) OP_EQ NUM): 7 vs 7
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:997: assert(g[i]->is_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:998: assert(g[i]->is_usable_filtered_guard OP_EQ 1): 1 vs 1
         OK src/test/test_entrynodes.c:1000: assert(num_reachable_filtered_guards(gs, NULL) OP_EQ NUM): 7 vs 7Mar 14 09:50:56.182 [err] tor_assertion_failed_(): Bug: src/feature/client/entrynodes.c:2072: get_retry_schedule: Assertion 0 failed; aborting. (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug: Tor 0.4.8.10: Assertion 0 failed in get_retry_schedule at src/feature/client/entrynodes.c:2072: . Stack trace: (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(log_backtrace_impl+0x58) [0x55d7124029b8] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(tor_assertion_failed_+0x14f) [0x55d71241323f] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(+0x4d80e7) [0x55d7122b80e7] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(entry_guards_update_filtered_sets+0x2c8) [0x55d7122bb048] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(+0x2810be) [0x55d7120610be] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(testcase_run_one+0x2f4) [0x55d712239d74] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(tinytest_main+0x218) [0x55d71223a5f8] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(main+0x492) [0x55d711e77482] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     /usr/lib64/libc.so.6(+0x25e6a) [0x7f1b5816ce6a] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     /usr/lib64/libc.so.6(__libc_start_main+0x85) [0x7f1b5816cf25] (on Tor 0.4.8.10 )
Mar 14 09:50:56.183 [err] Bug:     ./test(_start+0x21) [0x55d711e775a1] (on Tor 0.4.8.10 )
[Lost connection!]
  [node_filter FAILED]
1/1 TESTS FAILED. (0 skipped)
```

```
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/14/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-14.0.9999/work/gcc-14.0.9999/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/14 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/14/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14 --disable-silent-rules --disable-dependency-tracking --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/14/python --enable-languages=c,c++,fortran,rust --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=yes,extra,rtl --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo Hardened 14.0.9999 p, commit 66ed76361b07f18610a134dca21c6945f03c6a6b' --with-gcc-major-version-only --enable-libstdcxx-time --enable-lto --disable-libstdcxx-pch --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-fixed-point --enable-targets=all --enable-libgomp --disable-libssp --disable-libada --disable-cet --disable-systemtap --enable-valgrind-annotations --disable-vtable-verify --disable-libvtv --with-zstd --with-isl --disable-isl-version-check --enable-default-pie --enable-host-pie --enable-host-bind-now --enable-default-ssp --disable-fixincludes --with-build-config='bootstrap-O3 bootstrap-lto'
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.0.1 20240311 (experimental) 31ce2e993d09dcad1ce139a2848a28de5931056d (Gentoo Hardened 14.0.9999 p, commit 66ed76361b07f18610a134dca21c6945f03c6a6b)
```
Comment 1 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 09:59:50 UTC
* -O2 -mavx -fno-vect-cost-model is enough
* src/test/test --verbose entrynodes/node_filter --no-fork lets us get the proper crash rather than the test driver
Comment 2 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 10:00:36 UTC
Program received signal SIGABRT, Aborted.
0x00007ffff7489cdc in ?? () from /usr/lib64/libc.so.6
(gdb) bt
#0  0x00007ffff7489cdc in ?? () from /usr/lib64/libc.so.6
#1  0x00007ffff7434032 in raise () from /usr/lib64/libc.so.6
#2  0x00007ffff741c4f2 in abort () from /usr/lib64/libc.so.6
#3  0x0000555555b39010 in tor_raw_abort_ () at src/lib/err/torerr.c:225
#4  0x0000555555b46e30 in tor_abort_ () at src/lib/log/util_bug.c:174
#5  0x0000555555a0fcde in get_retry_schedule (failing_since=<optimized out>, now=1710410426, is_primary=<optimized out>) at src/feature/client/entrynodes.c:2072
#6  entry_guard_consider_retry (guard=guard@entry=0x555555e6be60) at src/feature/client/entrynodes.c:2089
#7  0x0000555555a0fff0 in entry_guard_consider_retry (guard=0x555555e6be60) at src/feature/client/entrynodes.c:2084
#8  entry_guard_set_filtered_flags (options=options@entry=0x555555e1a4b0, gs=gs@entry=0x555555e6b500, guard=0x555555e6be60) at src/feature/client/entrynodes.c:1737
#9  0x0000555555a118aa in entry_guards_update_filtered_sets (gs=gs@entry=0x555555e6b500) at src/feature/client/entrynodes.c:1758
#10 0x00005555557cded7 in test_entry_guard_node_filter (arg=<optimized out>) at src/test/test_entrynodes.c:1037
#11 0x000055555599ece5 in testcase_run_bare_ (testcase=testcase@entry=0x555555da13d8 <entrynodes_tests+760>) at src/ext/tinytest.c:107
#12 0x000055555599edb3 in testcase_run_one (group=group@entry=0x555555d99380 <testgroups+864>, testcase=0x555555da13d8 <entrynodes_tests+760>) at src/ext/tinytest.c:272
#13 0x000055555599f60c in tinytest_main (c=c@entry=4, v=v@entry=0x7fffffffd928, groups=groups@entry=0x555555d99020 <testgroups>) at src/ext/tinytest.c:454
#14 0x00005555555eb47b in main (c=4, v=<optimized out>) at src/test/testing_common.c:424
(gdb)
Comment 3 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 10:15:01 UTC
The assert is at https://gitlab.torproject.org/tpo/core/tor/-/blob/tor-0.4.8.10/src/feature/client/entrynodes.c#L2072

```
(gdb) p delays
$3 = {{
    maximum = 21600,
    primary_delay = 600,
    nonprimary_delay = 3600
  }, {
    maximum = 345600,
    primary_delay = 5400,
    nonprimary_delay = 14400
  }, {
    maximum = 604800,
    primary_delay = 14400,
    nonprimary_delay = 64800
  }, {
    maximum = 9223372036854775807,
    primary_delay = 32400,
    nonprimary_delay = 129600
  }}
(gdb)
```
Comment 4 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 10:15:08 UTC
The bad loop is:
  for (i = 0; i < ARRAY_LENGTH(delays); ++i) {
    if (tdiff <= delays[i].maximum) {
      return is_primary ? delays[i].primary_delay : delays[i].nonprimary_delay;
    }
  }
Comment 5 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-03-14 18:27:45 UTC
Got a reproducer and ran cvise on it while slept.
Comment 6 Larry the Git Cow gentoo-dev 2024-03-18 04:45:34 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=da6dcbbd28d6482e45d726d2ade0a5c301c1e500

commit da6dcbbd28d6482e45d726d2ade0a5c301c1e500
Author:     Sam James <sam@gentoo.org>
AuthorDate: 2024-03-18 04:44:19 +0000
Commit:     Sam James <sam@gentoo.org>
CommitDate: 2024-03-18 04:44:19 +0000

    sys-devel/gcc: add 14.0.1_pre20240317
    
    Closes: https://bugs.gentoo.org/920233
    Closes: https://bugs.gentoo.org/925873
    Closes: https://bugs.gentoo.org/927013
    Signed-off-by: Sam James <sam@gentoo.org>

 sys-devel/gcc/Manifest                      |  1 +
 sys-devel/gcc/gcc-14.0.1_pre20240317.ebuild | 65 +++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+)