Message ID | 20220530191453.22812-1-dceara@redhat.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev] ci: Add UB Sanitizer. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/github-robot-_ovn-kubernetes | success | github build: passed |
On Mon, May 30, 2022 at 3:15 PM Dumitru Ceara <dceara@redhat.com> wrote: > > Pick up latest OVS UB fixes too, specifically: > c8c49a9db9f2 ("netdev-linux: Properly access 32-bit aligned rtnl_link_stats64 structs.") > a5cc859a4228 ("ofp-actions: Use aligned structures when decoding ofp actions.") > 08c3e5e37eee ("ofp-errors: Ensure parsed OFPT_ERROR messages are properly aligned.") > 933aaf9444a6 ("ofp-actions: Ensure aligned accesses to masked fields.") > 471babb8117a ("treewide: Avoid offsetting NULL pointers.") > 3764f5188af0 ("treewide: Fix invalid bit shift operations.") > > Signed-off-by: Dumitru Ceara <dceara@redhat.com> +1. Thanks. I applied the patch to the main branch. Numan > --- > .ci/linux-build.sh | 18 +++++++++++++----- > .github/workflows/test.yml | 4 ++++ > ovs | 2 +- > tests/atlocal.in | 5 +++++ > tests/automake.mk | 1 + > tests/ovs-macros.at | 5 +++++ > 6 files changed, 29 insertions(+), 6 deletions(-) > > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh > index c526e614d..570ddbace 100755 > --- a/.ci/linux-build.sh > +++ b/.ci/linux-build.sh > @@ -28,12 +28,20 @@ function configure_ovn() > save_OPTS="${OPTS} $*" > OPTS="${EXTRA_OPTS} ${save_OPTS}" > > -# If AddressSanitizer is requested, enable it, but only for OVN, not for OVS. > -# However, disable some optimizations for OVS, to make AddressSanitizer > -# reports user friendly. > +# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable it, > +# but only for OVN, not for OVS. However, disable some optimizations for > +# OVS, to make sanitizer reports user friendly. > if [ "$ASAN" ]; then > - CFLAGS="-fno-omit-frame-pointer -fno-common" > - OVN_CFLAGS="-fsanitize=address" > + CFLAGS="-O1 -fno-omit-frame-pointer -fno-common" > + CFLAGS_ASAN="-fsanitize=address" > + OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}" > +fi > + > +if [ "$UBSAN" ]; then > + # Use the default options configured in tests/atlocal.in, in UBSAN_OPTIONS. > + CFLAGS="-O1 -fno-omit-frame-pointer -fno-common" > + CFLAGS_UBSAN="-fsanitize=undefined" > + OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_UBSAN}" > fi > > if [ "$CC" = "clang" ]; then > diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml > index 7b3648116..b24bc7a3b 100644 > --- a/.github/workflows/test.yml > +++ b/.github/workflows/test.yml > @@ -21,6 +21,7 @@ jobs: > OPTS: ${{ matrix.opts }} > TESTSUITE: ${{ matrix.testsuite }} > ASAN: ${{ matrix.asan }} > + UBSAN: ${{ matrix.ubsan }} > > name: linux ${{ join(matrix.*, ' ') }} > runs-on: ubuntu-20.04 > @@ -41,6 +42,9 @@ jobs: > - compiler: clang > testsuite: test > asan: asan > + - compiler: clang > + testsuite: test > + ubsan: ubsan > > - compiler: gcc > testsuite: test > diff --git a/ovs b/ovs > index d94cd0d3e..d7c0b90fa 160000 > --- a/ovs > +++ b/ovs > @@ -1 +1 @@ > -Subproject commit d94cd0d3eec33e4290d7ca81918f5ac61444886e > +Subproject commit d7c0b90fa360a694f0f3b4f4ce1c514fec4e4359 > diff --git a/tests/atlocal.in b/tests/atlocal.in > index eb80cbd1b..d2edea4ea 100644 > --- a/tests/atlocal.in > +++ b/tests/atlocal.in > @@ -214,6 +214,11 @@ export OVS_CTL_TIMEOUT > ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS > export ASAN_OPTIONS > > +# Add some default flags for UndefinedBehaviorSanitizer, if it was used > +# for the build. > +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=ubsan:$UBSAN_OPTIONS > +export UBSAN_OPTIONS > + > # Check whether we should run ddlog tests. > if test '@DDLOGLIBDIR@' != no; then > TEST_DDLOG="yes" > diff --git a/tests/automake.mk b/tests/automake.mk > index a5934d2b9..9733e8fa0 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -81,6 +81,7 @@ check-local: > set $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=$(AUTOTEST_PATH); \ > "$$@" $(TESTSUITEFLAGS) || \ > (test -z "$$(find $(TESTSUITE_DIR) -name 'asan.*')" && \ > + test -z "$$(find $(TESTSUITE_DIR) -name 'ubsan.*')" && \ > test X'$(RECHECK)' = Xyes && "$$@" --recheck) > > # Python Coverage support. > diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at > index 0482b7f5b..09c05cf16 100644 > --- a/tests/ovs-macros.at > +++ b/tests/ovs-macros.at > @@ -233,6 +233,11 @@ ovs_cleanup() { > cat asan.* > AT_FAIL_IF([:]) > fi > + if test "$(echo ubsan.*)" != 'ubsan.*'; then > + echo "Undefined Behavior Sanitizer reported errors in:" ubsan.* > + cat ubsan.* > + AT_FAIL_IF([:]) > + fi > } > > ovs_wait () { > -- > 2.27.0 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh index c526e614d..570ddbace 100755 --- a/.ci/linux-build.sh +++ b/.ci/linux-build.sh @@ -28,12 +28,20 @@ function configure_ovn() save_OPTS="${OPTS} $*" OPTS="${EXTRA_OPTS} ${save_OPTS}" -# If AddressSanitizer is requested, enable it, but only for OVN, not for OVS. -# However, disable some optimizations for OVS, to make AddressSanitizer -# reports user friendly. +# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable it, +# but only for OVN, not for OVS. However, disable some optimizations for +# OVS, to make sanitizer reports user friendly. if [ "$ASAN" ]; then - CFLAGS="-fno-omit-frame-pointer -fno-common" - OVN_CFLAGS="-fsanitize=address" + CFLAGS="-O1 -fno-omit-frame-pointer -fno-common" + CFLAGS_ASAN="-fsanitize=address" + OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}" +fi + +if [ "$UBSAN" ]; then + # Use the default options configured in tests/atlocal.in, in UBSAN_OPTIONS. + CFLAGS="-O1 -fno-omit-frame-pointer -fno-common" + CFLAGS_UBSAN="-fsanitize=undefined" + OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_UBSAN}" fi if [ "$CC" = "clang" ]; then diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7b3648116..b24bc7a3b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,6 +21,7 @@ jobs: OPTS: ${{ matrix.opts }} TESTSUITE: ${{ matrix.testsuite }} ASAN: ${{ matrix.asan }} + UBSAN: ${{ matrix.ubsan }} name: linux ${{ join(matrix.*, ' ') }} runs-on: ubuntu-20.04 @@ -41,6 +42,9 @@ jobs: - compiler: clang testsuite: test asan: asan + - compiler: clang + testsuite: test + ubsan: ubsan - compiler: gcc testsuite: test diff --git a/ovs b/ovs index d94cd0d3e..d7c0b90fa 160000 --- a/ovs +++ b/ovs @@ -1 +1 @@ -Subproject commit d94cd0d3eec33e4290d7ca81918f5ac61444886e +Subproject commit d7c0b90fa360a694f0f3b4f4ce1c514fec4e4359 diff --git a/tests/atlocal.in b/tests/atlocal.in index eb80cbd1b..d2edea4ea 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -214,6 +214,11 @@ export OVS_CTL_TIMEOUT ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS export ASAN_OPTIONS +# Add some default flags for UndefinedBehaviorSanitizer, if it was used +# for the build. +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=ubsan:$UBSAN_OPTIONS +export UBSAN_OPTIONS + # Check whether we should run ddlog tests. if test '@DDLOGLIBDIR@' != no; then TEST_DDLOG="yes" diff --git a/tests/automake.mk b/tests/automake.mk index a5934d2b9..9733e8fa0 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -81,6 +81,7 @@ check-local: set $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=$(AUTOTEST_PATH); \ "$$@" $(TESTSUITEFLAGS) || \ (test -z "$$(find $(TESTSUITE_DIR) -name 'asan.*')" && \ + test -z "$$(find $(TESTSUITE_DIR) -name 'ubsan.*')" && \ test X'$(RECHECK)' = Xyes && "$$@" --recheck) # Python Coverage support. diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at index 0482b7f5b..09c05cf16 100644 --- a/tests/ovs-macros.at +++ b/tests/ovs-macros.at @@ -233,6 +233,11 @@ ovs_cleanup() { cat asan.* AT_FAIL_IF([:]) fi + if test "$(echo ubsan.*)" != 'ubsan.*'; then + echo "Undefined Behavior Sanitizer reported errors in:" ubsan.* + cat ubsan.* + AT_FAIL_IF([:]) + fi } ovs_wait () {
Pick up latest OVS UB fixes too, specifically: c8c49a9db9f2 ("netdev-linux: Properly access 32-bit aligned rtnl_link_stats64 structs.") a5cc859a4228 ("ofp-actions: Use aligned structures when decoding ofp actions.") 08c3e5e37eee ("ofp-errors: Ensure parsed OFPT_ERROR messages are properly aligned.") 933aaf9444a6 ("ofp-actions: Ensure aligned accesses to masked fields.") 471babb8117a ("treewide: Avoid offsetting NULL pointers.") 3764f5188af0 ("treewide: Fix invalid bit shift operations.") Signed-off-by: Dumitru Ceara <dceara@redhat.com> --- .ci/linux-build.sh | 18 +++++++++++++----- .github/workflows/test.yml | 4 ++++ ovs | 2 +- tests/atlocal.in | 5 +++++ tests/automake.mk | 1 + tests/ovs-macros.at | 5 +++++ 6 files changed, 29 insertions(+), 6 deletions(-)