bus1 / dbus-broker

Linux D-Bus Message Broker
https://github.com/bus1/dbus-broker/wiki
Apache License 2.0
667 stars 78 forks source link

A couple of ASan/UBSan issues when running tests #281

Closed mrc0mmand closed 1 year ago

mrc0mmand commented 2 years ago

Hey!

I gave the tests a quick run with sanitizers and it found couple of issues (both in dbus-broker and the respective c-util subprojects:

# meson build -Db_sanitize=address,undefined
# ninja -C build
# export ASAN_OPTIONS=strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
# export UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1
# ninja -C build test
ninja: Entering directory `build'
[0/1] Running all tests.
 1/48 c-stdaux / API Symbol Visibility                   OK              0.14s
 2/48 c-utf8 / API Symbol Visibility                     OK              0.02s
 3/48 c-utf8 / Basic API Behavior                        OK              0.08s
 4/48 c-dvar / API Symbol Visibility                     OK              0.01s
 5/48 c-dvar / Basic API Behavior                        FAIL            0.10s   exit status 1
>>> MALLOC_PERTURB_=79 /root/dbus-broker/build/subprojects/c-dvar/src/test-basic
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x5613ec017a3a in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x5613ec0194b3 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x5613ec01bf39 in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x5613ec005cee in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x5613ec006177 in test_basic_serialization ../subprojects/c-dvar/src/test-basic.c:49
    #5 0x5613ec0086a9 in main ../subprojects/c-dvar/src/test-basic.c:287
    #6 0x7f7c17ce9b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #7 0x5613ec0052dd in _start (/root/dbus-broker/build/subprojects/c-dvar/src/test-basic+0x212dd)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

 6/48 c-dvar / D-Bus String Restrictions                 OK              0.02s
 7/48 c-dvar / Type and Signature Parser                 OK              0.02s
 8/48 c-list / API Symbol Visibility                     OK              0.01s
 9/48 c-list / Basic API Behavior                        OK              0.01s
10/48 c-list / Embedded List Nodes                       OK              0.01s
11/48 c-rbtree / API Symbol Visibility                   OK              0.01s
12/48 c-stdaux / Basic API Behavior                      OK              0.56s
13/48 c-rbtree / Generic Map                             OK              0.02s
14/48 c-rbtree / Miscellaneous                           OK              0.01s
15/48 c-rbtree / Lockless Parallel Readers               SKIP            0.01s   exit status 77
16/48 c-rbtree / Posix tsearch(3p) Comparison            OK              0.02s
17/48 c-ini / API Symbol Visibility                      FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=127 /root/dbus-broker/build/subprojects/c-ini/src/test-api
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-ini/src/c-ini.c:169:9: runtime error: null pointer passed as argument 2, which is declared to never be null
    #0 0x7f2fc64f3831 in c_ini_group_new ../subprojects/c-ini/src/c-ini.c:169
    #1 0x7f2fc64f6f53 in c_ini_domain_new ../subprojects/c-ini/src/c-ini.c:373
    #2 0x7f2fc64faff9 in c_ini_reader_feed ../subprojects/c-ini/src/c-ini-reader.c:348
    #3 0x55705bcc4815 in test_api ../subprojects/c-ini/src/test-api.c:36
    #4 0x55705bcc5029 in main ../subprojects/c-ini/src/test-api.c:81
    #5 0x7f2fc59bfb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #6 0x55705bcc428d in _start (/root/dbus-broker/build/subprojects/c-ini/src/test-api+0x228d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-ini/src/c-ini.c:169:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

18/48 c-ini / Basic API Behavior                         FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=61 /root/dbus-broker/build/subprojects/c-ini/src/test-basic
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-ini/src/c-ini.c:169:9: runtime error: null pointer passed as argument 2, which is declared to never be null
    #0 0x55d9fc985b26 in c_ini_group_new ../subprojects/c-ini/src/c-ini.c:169
    #1 0x55d9fc989248 in c_ini_domain_new ../subprojects/c-ini/src/c-ini.c:373
    #2 0x55d9fc98d2ee in c_ini_reader_feed ../subprojects/c-ini/src/c-ini-reader.c:348
    #3 0x55d9fc98d9c6 in c_ini_reader_parse ../subprojects/c-ini/src/c-ini-reader.c:435
    #4 0x55d9fc981652 in test_basic_reader ../subprojects/c-ini/src/test-basic.c:40
    #5 0x55d9fc982608 in main ../subprojects/c-ini/src/test-basic.c:147
    #6 0x7fdb1edffb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #7 0x55d9fc98123d in _start (/root/dbus-broker/build/subprojects/c-ini/src/test-basic+0x1b23d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-ini/src/c-ini.c:169:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

19/48 c-ini / Parser Capabilities                        FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=126 /root/dbus-broker/build/subprojects/c-ini/src/test-reader
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-ini/src/c-ini.c:169:9: runtime error: null pointer passed as argument 2, which is declared to never be null
    #0 0x559f021b2801 in c_ini_group_new ../subprojects/c-ini/src/c-ini.c:169
    #1 0x559f021b5f23 in c_ini_domain_new ../subprojects/c-ini/src/c-ini.c:373
    #2 0x559f021b9fc9 in c_ini_reader_feed ../subprojects/c-ini/src/c-ini-reader.c:348
    #3 0x559f021ba6a1 in c_ini_reader_parse ../subprojects/c-ini/src/c-ini-reader.c:435
    #4 0x559f021ad637 in test_reader_normal_whitespace ../subprojects/c-ini/src/test-reader.c:175
    #5 0x559f021af2de in main ../subprojects/c-ini/src/test-reader.c:291
    #6 0x7f78ff628b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #7 0x559f021ac24d in _start (/root/dbus-broker/build/subprojects/c-ini/src/test-reader+0x1c24d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-ini/src/c-ini.c:169:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

20/48 c-shquote / API Symbol Visibility                  OK              0.01s
21/48 c-shquote / Basic API Behavior                     OK              0.01s
22/48 c-shquote / Private Helper Functions               FAIL            0.02s   exit status 1
>>> MALLOC_PERTURB_=65 /root/dbus-broker/build/subprojects/c-shquote/src/test-private
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-shquote/src/c-shquote.c:108:21: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x55613657068e in c_shquote_strncspn ../subprojects/c-shquote/src/c-shquote.c:108
    #1 0x55613656b9ee in test_strncspn ../subprojects/c-shquote/src/test-private.c:156
    #2 0x55613656f6be in main ../subprojects/c-shquote/src/test-private.c:391
    #3 0x7fbf85c14b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #4 0x55613656924d in _start (/root/dbus-broker/build/subprojects/c-shquote/src/test-private+0xa24d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-shquote/src/c-shquote.c:108:21 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

23/48 dbus-broker / Address Handling                     OK              0.01s
24/48 dbus-broker / AppArmor Handling                    OK              0.01s
25/48 dbus-broker / Configuration Parser                 OK              0.01s
26/48 c-rbtree / Basic API Behavior                      OK              0.34s
27/48 dbus-broker / Event Dispatcher                     OK              0.01s
28/48 dbus-broker / Directory Watch                      OK              0.02s
29/48 dbus-broker / Error Handling                       OK              0.01s
30/48 dbus-broker / D-Bus Match Handling                 OK              0.01s
31/48 dbus-broker / Utility File-Desciptor Lists         FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=10 /root/dbus-broker/build/src/test-fdlist
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../src/util/fdlist.c:40:9: runtime error: null pointer passed as argument 2, which is declared to never be null
    #0 0x563823257737 in fdlist_new_with_fds ../src/util/fdlist.c:40
    #1 0x563823256641 in test_setup ../src/util/test-fdlist.c:15
    #2 0x5638232572fe in main ../src/util/test-fdlist.c:89
    #3 0x7f6bab103b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #4 0x56382325621d in _start (/root/dbus-broker/build/src/test-fdlist+0x321d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/util/fdlist.c:40:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

32/48 dbus-broker / Miscellaneous Helpers                OK              0.02s
33/48 dbus-broker / Name Registry                        OK              0.01s
34/48 dbus-broker / D-Bus Message Abstraction            OK              0.04s
35/48 dbus-broker / NSS Cache                            OK              0.02s
36/48 dbus-broker / SO_PEERSEC Queries                   FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=205 /root/dbus-broker/build/src/test-peersec
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../src/util/test-peersec.c:60:43: runtime error: load of misaligned address 0x7ffe6f3b6169 for type 'const uint64_t', which requires 8 byte alignment
0x7ffe6f3b6169: note: pointer points here
 00 00 00  00 0b 30 bc de c2 ae f4  77 77 2f 61 b3 d5 d3 8e  b2 78 38 36 5f 36 34 00  00 00 00 00 00
              ^ 
    #0 0x55f11118dac8 in socketpair_fallback ../src/util/test-peersec.c:60
    #1 0x55f11118ee0a in test_peersec ../src/util/test-peersec.c:147
    #2 0x55f11118f463 in main ../src/util/test-peersec.c:172
    #3 0x7fba0cc8eb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #4 0x55f11118d43d in _start (/root/dbus-broker/build/src/test-peersec+0xc43d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/util/test-peersec.c:60:43 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

37/48 dbus-broker / Reply Tracking                       OK              0.02s
38/48 dbus-broker / D-Bus SASL Parser                    OK              0.01s
39/48 dbus-broker / D-Bus Socket Abstraction             OK              0.02s
40/48 dbus-broker / Message Sender Stitching             FAIL            0.03s   exit status 1
>>> MALLOC_PERTURB_=235 /root/dbus-broker/build/src/test-stitching
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x55661509995c in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x55661509b3d5 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x55661509de5b in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x556615076620 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x556615076b2e in test_new_message ../src/dbus/test-stitching.c:50
    #5 0x55661507825c in test_stitching ../src/dbus/test-stitching.c:176
    #6 0x5566150783d8 in main ../src/dbus/test-stitching.c:187
    #7 0x7ffa8f2ebb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #8 0x55661507642d in _start (/root/dbus-broker/build/src/test-stitching+0x3942d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

41/48 dbus-broker / Systemd Utilities                    OK              0.02s
42/48 dbus-broker / User Accounting                      OK              0.01s
43/48 dbus-broker / Broker API                           FAIL            0.10s   killed by signal 6 SIGABRT
>>> MALLOC_PERTURB_=102 /root/dbus-broker/build/test/dbus/test-broker
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x55c7ad66917e in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x55c7ad66abf7 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x55c7ad66d67d in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x55c7ad5c08e6 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x55c7ad5c5043 in controller_handle_method ../src/broker/controller-dbus.c:410
    #5 0x55c7ad5c5890 in controller_dispatch_controller ../src/broker/controller-dbus.c:460
    #6 0x55c7ad5c5da1 in controller_dispatch_object ../src/broker/controller-dbus.c:503
    #7 0x55c7ad5c64d0 in controller_dbus_dispatch ../src/broker/controller-dbus.c:571
    #8 0x55c7ad5bd732 in controller_dispatch_connection ../src/broker/controller.c:230
    #9 0x55c7ad644448 in dispatch_context_dispatch ../src/util/dispatch.c:343
    #10 0x55c7ad5b9431 in broker_run ../src/broker/broker.c:213
    #11 0x55c7ad5b550f in run ../src/broker/main.c:259
    #12 0x55c7ad5b5704 in main ../src/broker/main.c:289
    #13 0x7f4b9c63eb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #14 0x55c7ad5b370d in _start (/root/dbus-broker/build/src/dbus-broker+0x10070d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
test-broker: ../test/dbus/util-broker.c:254: util_fork_broker: Assertion `c_assert_result && "r >= 0"' failed.
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

44/48 dbus-broker / Driver API                           FAIL            0.09s   killed by signal 6 SIGABRT
>>> MALLOC_PERTURB_=83 /root/dbus-broker/build/test/dbus/test-driver
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x55bd3c06e17e in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x55bd3c06fbf7 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x55bd3c07267d in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x55bd3bfc58e6 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x55bd3bfca043 in controller_handle_method ../src/broker/controller-dbus.c:410
    #5 0x55bd3bfca890 in controller_dispatch_controller ../src/broker/controller-dbus.c:460
    #6 0x55bd3bfcada1 in controller_dispatch_object ../src/broker/controller-dbus.c:503
    #7 0x55bd3bfcb4d0 in controller_dbus_dispatch ../src/broker/controller-dbus.c:571
    #8 0x55bd3bfc2732 in controller_dispatch_connection ../src/broker/controller.c:230
    #9 0x55bd3c049448 in dispatch_context_dispatch ../src/util/dispatch.c:343
    #10 0x55bd3bfbe431 in broker_run ../src/broker/broker.c:213
    #11 0x55bd3bfba50f in run ../src/broker/main.c:259
    #12 0x55bd3bfba704 in main ../src/broker/main.c:289
    #13 0x7f0a6c0f2b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #14 0x55bd3bfb870d in _start (/root/dbus-broker/build/src/dbus-broker+0x10070d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
test-driver: ../test/dbus/util-broker.c:254: util_fork_broker: Assertion `c_assert_result && "r >= 0"' failed.
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

45/48 dbus-broker / FD Stream Constraints                FAIL            0.09s   killed by signal 6 SIGABRT
>>> MALLOC_PERTURB_=16 /root/dbus-broker/build/test/dbus/test-fdstream
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x560006a3f17e in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x560006a40bf7 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x560006a4367d in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x5600069968e6 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x56000699b043 in controller_handle_method ../src/broker/controller-dbus.c:410
    #5 0x56000699b890 in controller_dispatch_controller ../src/broker/controller-dbus.c:460
    #6 0x56000699bda1 in controller_dispatch_object ../src/broker/controller-dbus.c:503
    #7 0x56000699c4d0 in controller_dbus_dispatch ../src/broker/controller-dbus.c:571
    #8 0x560006993732 in controller_dispatch_connection ../src/broker/controller.c:230
    #9 0x560006a1a448 in dispatch_context_dispatch ../src/util/dispatch.c:343
    #10 0x56000698f431 in broker_run ../src/broker/broker.c:213
    #11 0x56000698b50f in run ../src/broker/main.c:259
    #12 0x56000698b704 in main ../src/broker/main.c:289
    #13 0x7fa5dae2bb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #14 0x56000698970d in _start (/root/dbus-broker/build/src/dbus-broker+0x10070d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
test-fdstream: ../test/dbus/util-broker.c:254: util_fork_broker: Assertion `c_assert_result && "r >= 0"' failed.
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

46/48 dbus-broker / Client Lifetime                      FAIL            0.09s   killed by signal 6 SIGABRT
>>> MALLOC_PERTURB_=42 /root/dbus-broker/build/test/dbus/test-lifetime
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x555f79bcd17e in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x555f79bcebf7 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x555f79bd167d in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x555f79b248e6 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x555f79b29043 in controller_handle_method ../src/broker/controller-dbus.c:410
    #5 0x555f79b29890 in controller_dispatch_controller ../src/broker/controller-dbus.c:460
    #6 0x555f79b29da1 in controller_dispatch_object ../src/broker/controller-dbus.c:503
    #7 0x555f79b2a4d0 in controller_dbus_dispatch ../src/broker/controller-dbus.c:571
    #8 0x555f79b21732 in controller_dispatch_connection ../src/broker/controller.c:230
    #9 0x555f79ba8448 in dispatch_context_dispatch ../src/util/dispatch.c:343
    #10 0x555f79b1d431 in broker_run ../src/broker/broker.c:213
    #11 0x555f79b1950f in run ../src/broker/main.c:259
    #12 0x555f79b19704 in main ../src/broker/main.c:289
    #13 0x7f382f973b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #14 0x555f79b1770d in _start (/root/dbus-broker/build/src/dbus-broker+0x10070d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
test-lifetime: ../test/dbus/util-broker.c:254: util_fork_broker: Assertion `c_assert_result && "r >= 0"' failed.
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

47/48 dbus-broker / Signals and Matches                  FAIL            0.09s   killed by signal 6 SIGABRT
>>> MALLOC_PERTURB_=140 /root/dbus-broker/build/test/dbus/test-matches
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
../subprojects/c-dvar/src/c-dvar-writer.c:45:9: runtime error: null pointer passed as argument 1, which is declared to never be null
    #0 0x5644f57a817e in c_dvar_write_data ../subprojects/c-dvar/src/c-dvar-writer.c:45
    #1 0x5644f57a9bf7 in c_dvar_try_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:131
    #2 0x5644f57ac67d in c_dvar_vwrite ../subprojects/c-dvar/src/c-dvar-writer.c:309
    #3 0x5644f56ff8e6 in c_dvar_write ../subprojects/c-dvar/src/c-dvar.h:349
    #4 0x5644f5704043 in controller_handle_method ../src/broker/controller-dbus.c:410
    #5 0x5644f5704890 in controller_dispatch_controller ../src/broker/controller-dbus.c:460
    #6 0x5644f5704da1 in controller_dispatch_object ../src/broker/controller-dbus.c:503
    #7 0x5644f57054d0 in controller_dbus_dispatch ../src/broker/controller-dbus.c:571
    #8 0x5644f56fc732 in controller_dispatch_connection ../src/broker/controller.c:230
    #9 0x5644f5783448 in dispatch_context_dispatch ../src/util/dispatch.c:343
    #10 0x5644f56f8431 in broker_run ../src/broker/broker.c:213
    #11 0x5644f56f450f in run ../src/broker/main.c:259
    #12 0x5644f56f4704 in main ../src/broker/main.c:289
    #13 0x7f90202f9b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #14 0x5644f56f270d in _start (/root/dbus-broker/build/src/dbus-broker+0x10070d)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../subprojects/c-dvar/src/c-dvar-writer.c:45:9 in 
test-matches: ../test/dbus/util-broker.c:254: util_fork_broker: Assertion `c_assert_result && "r >= 0"' failed.
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

48/48 dbus-broker / D-Bus I/O Queues                     OK              1.48s

Summary of Failures:

 5/48 c-dvar / Basic API Behavior                FAIL            0.10s   exit status 1
17/48 c-ini / API Symbol Visibility              FAIL            0.03s   exit status 1
18/48 c-ini / Basic API Behavior                 FAIL            0.03s   exit status 1
19/48 c-ini / Parser Capabilities                FAIL            0.03s   exit status 1
22/48 c-shquote / Private Helper Functions       FAIL            0.02s   exit status 1
31/48 dbus-broker / Utility File-Desciptor Lists FAIL            0.03s   exit status 1
36/48 dbus-broker / SO_PEERSEC Queries           FAIL            0.03s   exit status 1
40/48 dbus-broker / Message Sender Stitching     FAIL            0.03s   exit status 1
43/48 dbus-broker / Broker API                   FAIL            0.10s   killed by signal 6 SIGABRT
44/48 dbus-broker / Driver API                   FAIL            0.09s   killed by signal 6 SIGABRT
45/48 dbus-broker / FD Stream Constraints        FAIL            0.09s   killed by signal 6 SIGABRT
46/48 dbus-broker / Client Lifetime              FAIL            0.09s   killed by signal 6 SIGABRT
47/48 dbus-broker / Signals and Matches          FAIL            0.09s   killed by signal 6 SIGABRT

Ok:                 34  
Expected Fail:      0   
Fail:               13  
Unexpected Pass:    0   
Skipped:            1   
Timeout:            0   

In case there would be an interest to run this in a CI periodically, it shouldn't be a much of an issue once libasan and libubsan are added to the CI image (https://github.com/c-util/automation/blob/main/src/ci-c-util/Dockerfile).

dvdhrm commented 2 years ago

The unaligned read is an actual issue, which I now fixed. I don't see how these other issues can actually arise. They all boil down to the sanitizer assuming the constructor failed, when I don't see how that can actually happen.

The libasan and libubsan have been added to the CI images (though I haven't rebuilt the images, yet).

evverx commented 2 years ago

I was going to report that dbus-broker-launcher fails to start under UBSan but it appears both backtraces I extracted from a container where systemd was tested with dfuzzer are here as well.

They all boil down to the sanitizer assuming the constructor failed

As far as I understand UBSan complains that for example null is passed to memcpy(dup, label, n_label) as label. It doesn't complain about dup so the constructor doesn't fail. It's UB in the sense that compilers can assume that pointers passed to memcpy, memset and so on can't be NULLs so they can be safely optimized away. It potentially can lead to crashes. For example, here's what the GCC compiler can do

GCC might now optimize away the null pointer check in code like:

  int copy (int* dest, int* src, size_t nbytes) {
    memmove (dest, src, nbytes);
    if (src != NULL)
      return *src;
    return 0;
  }
The pointers passed to memmove (and similar functions in <string.h>) must be non-null even when nbytes==0, so GCC can use that information to remove the check after the memmove call. Calling copy(p, NULL, 0) can therefore deference a null pointer and crash.

The example above needs to be fixed to avoid the invalid memmove call, for example:

    if (nbytes != 0)
      memmove (dest, src, nbytes);
dvdhrm commented 2 years ago

@evverx Indeed, I misread those errors. I now added c_mem*() functions to c-stdaux, similar to the helpers in systemd src/basic/memory-util.h. I think I converted most call-sites. If anything shows up again, please let me know!

Thanks for the report!

evverx commented 2 years ago

Looks like the issues are gone. Thanks!

My guess would be that @mrc0mmand was planning to start running the unit tests under ASan/UBSan on the CI so I'll leave it to @mrc0mmand to decide whether this issue should be closed or not.

dvdhrm commented 1 year ago

I am closing this. The issues have been fixed and libubsan/libasan is available in the CI images. Thanks to everyone involved! Maybe at one point we can get the integration into the CI runs as well.