ctf-writer: avoid undefined behavior left shift
authorSimon Marchi <simon.marchi@efficios.com>
Sat, 18 Feb 2023 03:13:16 +0000 (22:13 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 7 Mar 2023 16:23:40 +0000 (11:23 -0500)
commit6e137ea259113b5452a2dc268d43a7e4a39bccab
tree80f265e09c6fd610b3d1f9a199e734c35b23ef33
parente458ac29e6e221e35996f1f615e07a8fad4c7d27
ctf-writer: avoid undefined behavior left shift

Running the plugins/src.ctf.fs/succeed/test_succeed test in a build with
-fsanitize=undefined, I get a failure:

    # Generating trace 'simple'
    ERROR: "/home/simark/build/babeltrace/tests/plugins/src.ctf.fs/succeed/gen-trace-simple" "/tmp/tmp.QvrLAHYWXw" failed
    not ok 3 - Generated trace 'simple' gives the expected output

This is because of this undefined behavior error:

    $ /home/simark/build/babeltrace/tests/plugins/src.ctf.fs/succeed/gen-trace-simple /tmp/yo
    /home/simark/src/babeltrace/src/ctf-writer/stream.c:483:29: runtime error: shift exponent 64 is too large for 64-bit type 'long long unsigned int'
        #0 0x7feddba0c21d in update_clock_value /home/simark/src/babeltrace/src/ctf-writer/stream.c:483
        #1 0x7feddba0c918 in visit_field_update_clock_value /home/simark/src/babeltrace/src/ctf-writer/stream.c:555
        #2 0x7feddba0cd74 in visit_field_update_clock_value /home/simark/src/babeltrace/src/ctf-writer/stream.c:626
        #3 0x7feddba0ced2 in visit_event_update_clock_value /home/simark/src/babeltrace/src/ctf-writer/stream.c:663
        #4 0x7feddba0e129 in set_packet_context_timestamps /home/simark/src/babeltrace/src/ctf-writer/stream.c:818
        #5 0x7feddba0ebca in auto_populate_packet_context /home/simark/src/babeltrace/src/ctf-writer/stream.c:908
        #6 0x7feddba146aa in bt_ctf_stream_flush /home/simark/src/babeltrace/src/ctf-writer/stream.c:1650
        #7 0x55940807b535 in write_stream /home/simark/src/babeltrace/tests/plugins/src.ctf.fs/succeed/gen-trace-simple.c:109
        #8 0x55940807b75b in main /home/simark/src/babeltrace/tests/plugins/src.ctf.fs/succeed/gen-trace-simple.c:119
        #9 0x7feddae3c78f  (/usr/lib/libc.so.6+0x2378f)
        #10 0x7feddae3c849 in __libc_start_main (/usr/lib/libc.so.6+0x23849)
        #11 0x559408079f74 in _start (/home/simark/build/babeltrace/tests/plugins/src.ctf.fs/succeed/.libs/gen-trace-simple+0x2af74)

Fix that by avoiding the left shift if new_val_size is 64.  If
new_val_size is 64, leave pow2 at 0, which is what I suppose is the
behavior we are relying on.

Change-Id: I8814773e24c53094be5af613664e6ed4b9ef2d82
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/9586
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
src/ctf-writer/stream.c
This page took 0.025548 seconds and 4 git commands to generate.