diff mbox series

[ovs-dev] Build tests with asan and ubsan together to reduce CI time.

Message ID 20220711110655.28169-1-fsb4000@yandex.ru
State Accepted
Headers show
Series [ovs-dev] Build tests with asan and ubsan together to reduce CI time. | expand

Checks

Context Check Description
ovsrobot/apply-robot warning apply and check: warning
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Igor Zhukov July 11, 2022, 11:06 a.m. UTC
From: Igor Zhukov <ivzhukov@sbercloud.ru>

Also fix typo in comments

Also fix memory leak in utilities/ovn-dbctl.c

Also add "-g" to CFLAGS to forbid autotools from adding "-g -O2" (temporary solution)

Signed-off-by: Igor Zhukov <ivzhukov@sbercloud.ru>
Acked-by: Dumitru Ceara <dceara@redhat.com>
Submitted-at: https://github.com/ovn-org/ovn/pull/139
---
 .ci/linux-build.sh         | 16 +++++-----------
 .github/workflows/test.yml | 10 ++++------
 tests/atlocal.in           |  4 ++--
 tests/automake.mk          |  3 +--
 tests/ovs-macros.at        | 11 +++--------
 utilities/ovn-dbctl.c      |  4 ++++
 6 files changed, 19 insertions(+), 29 deletions(-)

Comments

Ales Musil July 11, 2022, 11:13 a.m. UTC | #1
Hi Igor,

thank you for the patch. Yeah I was not quick enough to reply on the PR :)

Acked-by: Ales Musil <amusil@redhat.com>


On Mon, Jul 11, 2022 at 1:10 PM Igor Zhukov <fsb4000@yandex.ru> wrote:

> From: Igor Zhukov <ivzhukov@sbercloud.ru>
>
> Also fix typo in comments
>
> Also fix memory leak in utilities/ovn-dbctl.c
>
> Also add "-g" to CFLAGS to forbid autotools from adding "-g -O2"
> (temporary solution)
>
> Signed-off-by: Igor Zhukov <ivzhukov@sbercloud.ru>
> Acked-by: Dumitru Ceara <dceara@redhat.com>
> Submitted-at: https://github.com/ovn-org/ovn/pull/139
> ---
>  .ci/linux-build.sh         | 16 +++++-----------
>  .github/workflows/test.yml | 10 ++++------
>  tests/atlocal.in           |  4 ++--
>  tests/automake.mk          |  3 +--
>  tests/ovs-macros.at        | 11 +++--------
>  utilities/ovn-dbctl.c      |  4 ++++
>  6 files changed, 19 insertions(+), 29 deletions(-)
>
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> index 570ddbace..8c6d751dc 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -28,20 +28,14 @@ function configure_ovn()
>  save_OPTS="${OPTS} $*"
>  OPTS="${EXTRA_OPTS} ${save_OPTS}"
>
> -# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable
> it,
> +# If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
> enable them,
>  # but only for OVN, not for OVS.  However, disable some optimizations for
>  # OVS, to make sanitizer reports user friendly.
> -if [ "$ASAN" ]; then
> -    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common"
> -    CFLAGS_ASAN="-fsanitize=address"
> -    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}"
> -fi
> -
> -if [ "$UBSAN" ]; then
> +if [ "$SANITIZERS" ]; 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}"
> +    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common -g"
> +    CFLAGS_SANITIZERS="-fsanitize=address,undefined"
> +    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_SANITIZERS}"
>  fi
>
>  if [ "$CC" = "clang" ]; then
> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> index b24bc7a3b..e0de7c60e 100644
> --- a/.github/workflows/test.yml
> +++ b/.github/workflows/test.yml
> @@ -20,8 +20,8 @@ jobs:
>        M32:         ${{ matrix.m32 }}
>        OPTS:        ${{ matrix.opts }}
>        TESTSUITE:   ${{ matrix.testsuite }}
> -      ASAN:        ${{ matrix.asan }}
> -      UBSAN:       ${{ matrix.ubsan }}
> +      SANITIZERS:  ${{ matrix.sanitizers }}
> +      CFLAGS:      ${{ matrix.cflags }}
>
>      name: linux ${{ join(matrix.*, ' ') }}
>      runs-on: ubuntu-20.04
> @@ -41,10 +41,8 @@ jobs:
>              testsuite:    system-test
>            - compiler:     clang
>              testsuite:    test
> -            asan:         asan
> -          - compiler:     clang
> -            testsuite:    test
> -            ubsan:        ubsan
> +            sanitizers:   sanitizers
> +            cflags:       -g
>
>            - compiler:     gcc
>              testsuite:    test
> diff --git a/tests/atlocal.in b/tests/atlocal.in
> index b3a011f41..0b9a31276 100644
> --- a/tests/atlocal.in
> +++ b/tests/atlocal.in
> @@ -211,10 +211,10 @@ export OVS_CTL_TIMEOUT
>
>  # Add some default flags to make the tests run better under Address
>  # Sanitizer, if it was used for the build.
>
> -ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS
>
> +ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=sanitizers:$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
>
> +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=sanitizers:$UBSAN_OPTIONS
>  export UBSAN_OPTIONS
> diff --git a/tests/automake.mk b/tests/automake.mk
> index 9733e8fa0..dce9c9108 100644
> --- a/tests/automake.mk
> +++ b/tests/automake.mk
> @@ -80,8 +80,7 @@ export ovs_srcdir
>  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 -z "$$(find $(TESTSUITE_DIR) -name 'sanitizers.*')" && \
>          test X'$(RECHECK)' = Xyes && "$$@" --recheck)
>
>  # Python Coverage support.
> diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
> index 1bb31f315..5a06fe956 100644
> --- a/tests/ovs-macros.at
> +++ b/tests/ovs-macros.at
> @@ -224,14 +224,9 @@ m4_divert_pop([PREPARE_TESTS])
>
>  OVS_START_SHELL_HELPERS
>  ovs_cleanup() {
> -    if test "$(echo asan.*)" != 'asan.*'; then
> -        echo "Address Sanitizer reported errors in:" asan.*
> -        cat asan.*
> -        AT_FAIL_IF([:])
> -    fi
> -    if test "$(echo ubsan.*)" != 'ubsan.*'; then
> -        echo "Undefined Behavior Sanitizer reported errors in:" ubsan.*
> -        cat ubsan.*
> +    if test "$(echo sanitizers.*)" != 'sanitizers.*'; then
> +        echo "Undefined Behavior Sanitizer or Address Sanitizer reported
> errors in:" sanitizers.*
> +        cat sanitizers.*
>          AT_FAIL_IF([:])
>      fi
>  }
> diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
> index c4cc8c9b2..7ee0b92b4 100644
> --- a/utilities/ovn-dbctl.c
> +++ b/utilities/ovn-dbctl.c
> @@ -237,6 +237,10 @@ cleanup:
>          }
>          free(commands);
>          if (error) {
> +            for (int i = 0; i < argc; i++) {
> +                free(argv_[i]);
> +            }
> +            free(argv_);
>              ctl_fatal("%s", error);
>          }
>      }
> --
> 2.30.2
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
0-day Robot July 11, 2022, 11:19 a.m. UTC | #2
Bleep bloop.  Greetings Igor Zhukov, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
WARNING: Line is 80 characters long (recommended limit is 79)
#34 FILE: .ci/linux-build.sh:31:
# If AddressSanitizer and UndefinedBehaviorSanitizer are requested, enable them,

Lines checked: 154, Warnings: 1, Errors: 0


Please check this out.  If you feel there has been an error, please email aconole@redhat.com

Thanks,
0-day Robot
Numan Siddique July 11, 2022, 5:55 p.m. UTC | #3
On Mon, Jul 11, 2022 at 6:16 AM Ales Musil <amusil@redhat.com> wrote:
>
> Hi Igor,
>
> thank you for the patch. Yeah I was not quick enough to reply on the PR :)
>
> Acked-by: Ales Musil <amusil@redhat.com>

Thanks for the patch.

Can you please split this patch into 2 patches.

Patch 1 to fix the memory leak in utilities/ovn-dbctl.c and the patch
2 with the other changes.  This way we can backport the memory fix
patch to the other branches.

Numan

>
>
> On Mon, Jul 11, 2022 at 1:10 PM Igor Zhukov <fsb4000@yandex.ru> wrote:
>
> > From: Igor Zhukov <ivzhukov@sbercloud.ru>
> >
> > Also fix typo in comments
> >
> > Also fix memory leak in utilities/ovn-dbctl.c
> >
> > Also add "-g" to CFLAGS to forbid autotools from adding "-g -O2"
> > (temporary solution)
> >
> > Signed-off-by: Igor Zhukov <ivzhukov@sbercloud.ru>
> > Acked-by: Dumitru Ceara <dceara@redhat.com>
> > Submitted-at: https://github.com/ovn-org/ovn/pull/139
> > ---
> >  .ci/linux-build.sh         | 16 +++++-----------
> >  .github/workflows/test.yml | 10 ++++------
> >  tests/atlocal.in           |  4 ++--
> >  tests/automake.mk          |  3 +--
> >  tests/ovs-macros.at        | 11 +++--------
> >  utilities/ovn-dbctl.c      |  4 ++++
> >  6 files changed, 19 insertions(+), 29 deletions(-)
> >
> > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> > index 570ddbace..8c6d751dc 100755
> > --- a/.ci/linux-build.sh
> > +++ b/.ci/linux-build.sh
> > @@ -28,20 +28,14 @@ function configure_ovn()
> >  save_OPTS="${OPTS} $*"
> >  OPTS="${EXTRA_OPTS} ${save_OPTS}"
> >
> > -# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable
> > it,
> > +# If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
> > enable them,
> >  # but only for OVN, not for OVS.  However, disable some optimizations for
> >  # OVS, to make sanitizer reports user friendly.
> > -if [ "$ASAN" ]; then
> > -    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common"
> > -    CFLAGS_ASAN="-fsanitize=address"
> > -    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}"
> > -fi
> > -
> > -if [ "$UBSAN" ]; then
> > +if [ "$SANITIZERS" ]; 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}"
> > +    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common -g"
> > +    CFLAGS_SANITIZERS="-fsanitize=address,undefined"
> > +    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_SANITIZERS}"
> >  fi
> >
> >  if [ "$CC" = "clang" ]; then
> > diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> > index b24bc7a3b..e0de7c60e 100644
> > --- a/.github/workflows/test.yml
> > +++ b/.github/workflows/test.yml
> > @@ -20,8 +20,8 @@ jobs:
> >        M32:         ${{ matrix.m32 }}
> >        OPTS:        ${{ matrix.opts }}
> >        TESTSUITE:   ${{ matrix.testsuite }}
> > -      ASAN:        ${{ matrix.asan }}
> > -      UBSAN:       ${{ matrix.ubsan }}
> > +      SANITIZERS:  ${{ matrix.sanitizers }}
> > +      CFLAGS:      ${{ matrix.cflags }}
> >
> >      name: linux ${{ join(matrix.*, ' ') }}
> >      runs-on: ubuntu-20.04
> > @@ -41,10 +41,8 @@ jobs:
> >              testsuite:    system-test
> >            - compiler:     clang
> >              testsuite:    test
> > -            asan:         asan
> > -          - compiler:     clang
> > -            testsuite:    test
> > -            ubsan:        ubsan
> > +            sanitizers:   sanitizers
> > +            cflags:       -g
> >
> >            - compiler:     gcc
> >              testsuite:    test
> > diff --git a/tests/atlocal.in b/tests/atlocal.in
> > index b3a011f41..0b9a31276 100644
> > --- a/tests/atlocal.in
> > +++ b/tests/atlocal.in
> > @@ -211,10 +211,10 @@ export OVS_CTL_TIMEOUT
> >
> >  # Add some default flags to make the tests run better under Address
> >  # Sanitizer, if it was used for the build.
> >
> > -ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS
> >
> > +ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=sanitizers:$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
> >
> > +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=sanitizers:$UBSAN_OPTIONS
> >  export UBSAN_OPTIONS
> > diff --git a/tests/automake.mk b/tests/automake.mk
> > index 9733e8fa0..dce9c9108 100644
> > --- a/tests/automake.mk
> > +++ b/tests/automake.mk
> > @@ -80,8 +80,7 @@ export ovs_srcdir
> >  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 -z "$$(find $(TESTSUITE_DIR) -name 'sanitizers.*')" && \
> >          test X'$(RECHECK)' = Xyes && "$$@" --recheck)
> >
> >  # Python Coverage support.
> > diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
> > index 1bb31f315..5a06fe956 100644
> > --- a/tests/ovs-macros.at
> > +++ b/tests/ovs-macros.at
> > @@ -224,14 +224,9 @@ m4_divert_pop([PREPARE_TESTS])
> >
> >  OVS_START_SHELL_HELPERS
> >  ovs_cleanup() {
> > -    if test "$(echo asan.*)" != 'asan.*'; then
> > -        echo "Address Sanitizer reported errors in:" asan.*
> > -        cat asan.*
> > -        AT_FAIL_IF([:])
> > -    fi
> > -    if test "$(echo ubsan.*)" != 'ubsan.*'; then
> > -        echo "Undefined Behavior Sanitizer reported errors in:" ubsan.*
> > -        cat ubsan.*
> > +    if test "$(echo sanitizers.*)" != 'sanitizers.*'; then
> > +        echo "Undefined Behavior Sanitizer or Address Sanitizer reported
> > errors in:" sanitizers.*
> > +        cat sanitizers.*
> >          AT_FAIL_IF([:])
> >      fi
> >  }
> > diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
> > index c4cc8c9b2..7ee0b92b4 100644
> > --- a/utilities/ovn-dbctl.c
> > +++ b/utilities/ovn-dbctl.c
> > @@ -237,6 +237,10 @@ cleanup:
> >          }
> >          free(commands);
> >          if (error) {
> > +            for (int i = 0; i < argc; i++) {
> > +                free(argv_[i]);
> > +            }
> > +            free(argv_);
> >              ctl_fatal("%s", error);
> >          }
> >      }
> > --
> > 2.30.2
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
> >
>
> --
>
> Ales Musil
>
> Senior Software Engineer - OVN Core
>
> Red Hat EMEA <https://www.redhat.com>
>
> amusil@redhat.com    IM: amusil
> <https://red.ht/sig>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
Dumitru Ceara July 11, 2022, 6:42 p.m. UTC | #4
On 7/11/22 19:55, Numan Siddique wrote:
> On Mon, Jul 11, 2022 at 6:16 AM Ales Musil <amusil@redhat.com> wrote:
>>
>> Hi Igor,
>>
>> thank you for the patch. Yeah I was not quick enough to reply on the PR :)
>>
>> Acked-by: Ales Musil <amusil@redhat.com>
> 
> Thanks for the patch.
> 
> Can you please split this patch into 2 patches.
> 
> Patch 1 to fix the memory leak in utilities/ovn-dbctl.c and the patch
> 2 with the other changes.  This way we can backport the memory fix
> patch to the other branches.

I'd normally agree with this but I don't really think that we need to
backport the memleak fix.  That's unless we want to backport the rest
too.  The "leak" is benign, we call ctl_fatal() just after so the memory
is not really leaked.

Splitting the patch in two is also OK, obviously. :)

Regards,
Dumitru

> 
> Numan
> 
>>
>>
>> On Mon, Jul 11, 2022 at 1:10 PM Igor Zhukov <fsb4000@yandex.ru> wrote:
>>
>>> From: Igor Zhukov <ivzhukov@sbercloud.ru>
>>>
>>> Also fix typo in comments
>>>
>>> Also fix memory leak in utilities/ovn-dbctl.c
>>>
>>> Also add "-g" to CFLAGS to forbid autotools from adding "-g -O2"
>>> (temporary solution)
>>>
>>> Signed-off-by: Igor Zhukov <ivzhukov@sbercloud.ru>
>>> Acked-by: Dumitru Ceara <dceara@redhat.com>
>>> Submitted-at: https://github.com/ovn-org/ovn/pull/139
>>> ---
>>>  .ci/linux-build.sh         | 16 +++++-----------
>>>  .github/workflows/test.yml | 10 ++++------
>>>  tests/atlocal.in           |  4 ++--
>>>  tests/automake.mk          |  3 +--
>>>  tests/ovs-macros.at        | 11 +++--------
>>>  utilities/ovn-dbctl.c      |  4 ++++
>>>  6 files changed, 19 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
>>> index 570ddbace..8c6d751dc 100755
>>> --- a/.ci/linux-build.sh
>>> +++ b/.ci/linux-build.sh
>>> @@ -28,20 +28,14 @@ function configure_ovn()
>>>  save_OPTS="${OPTS} $*"
>>>  OPTS="${EXTRA_OPTS} ${save_OPTS}"
>>>
>>> -# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable
>>> it,
>>> +# If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
>>> enable them,
>>>  # but only for OVN, not for OVS.  However, disable some optimizations for
>>>  # OVS, to make sanitizer reports user friendly.
>>> -if [ "$ASAN" ]; then
>>> -    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common"
>>> -    CFLAGS_ASAN="-fsanitize=address"
>>> -    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}"
>>> -fi
>>> -
>>> -if [ "$UBSAN" ]; then
>>> +if [ "$SANITIZERS" ]; 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}"
>>> +    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common -g"
>>> +    CFLAGS_SANITIZERS="-fsanitize=address,undefined"
>>> +    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_SANITIZERS}"
>>>  fi
>>>
>>>  if [ "$CC" = "clang" ]; then
>>> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
>>> index b24bc7a3b..e0de7c60e 100644
>>> --- a/.github/workflows/test.yml
>>> +++ b/.github/workflows/test.yml
>>> @@ -20,8 +20,8 @@ jobs:
>>>        M32:         ${{ matrix.m32 }}
>>>        OPTS:        ${{ matrix.opts }}
>>>        TESTSUITE:   ${{ matrix.testsuite }}
>>> -      ASAN:        ${{ matrix.asan }}
>>> -      UBSAN:       ${{ matrix.ubsan }}
>>> +      SANITIZERS:  ${{ matrix.sanitizers }}
>>> +      CFLAGS:      ${{ matrix.cflags }}
>>>
>>>      name: linux ${{ join(matrix.*, ' ') }}
>>>      runs-on: ubuntu-20.04
>>> @@ -41,10 +41,8 @@ jobs:
>>>              testsuite:    system-test
>>>            - compiler:     clang
>>>              testsuite:    test
>>> -            asan:         asan
>>> -          - compiler:     clang
>>> -            testsuite:    test
>>> -            ubsan:        ubsan
>>> +            sanitizers:   sanitizers
>>> +            cflags:       -g
>>>
>>>            - compiler:     gcc
>>>              testsuite:    test
>>> diff --git a/tests/atlocal.in b/tests/atlocal.in
>>> index b3a011f41..0b9a31276 100644
>>> --- a/tests/atlocal.in
>>> +++ b/tests/atlocal.in
>>> @@ -211,10 +211,10 @@ export OVS_CTL_TIMEOUT
>>>
>>>  # Add some default flags to make the tests run better under Address
>>>  # Sanitizer, if it was used for the build.
>>>
>>> -ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS
>>>
>>> +ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=sanitizers:$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
>>>
>>> +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=sanitizers:$UBSAN_OPTIONS
>>>  export UBSAN_OPTIONS
>>> diff --git a/tests/automake.mk b/tests/automake.mk
>>> index 9733e8fa0..dce9c9108 100644
>>> --- a/tests/automake.mk
>>> +++ b/tests/automake.mk
>>> @@ -80,8 +80,7 @@ export ovs_srcdir
>>>  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 -z "$$(find $(TESTSUITE_DIR) -name 'sanitizers.*')" && \
>>>          test X'$(RECHECK)' = Xyes && "$$@" --recheck)
>>>
>>>  # Python Coverage support.
>>> diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
>>> index 1bb31f315..5a06fe956 100644
>>> --- a/tests/ovs-macros.at
>>> +++ b/tests/ovs-macros.at
>>> @@ -224,14 +224,9 @@ m4_divert_pop([PREPARE_TESTS])
>>>
>>>  OVS_START_SHELL_HELPERS
>>>  ovs_cleanup() {
>>> -    if test "$(echo asan.*)" != 'asan.*'; then
>>> -        echo "Address Sanitizer reported errors in:" asan.*
>>> -        cat asan.*
>>> -        AT_FAIL_IF([:])
>>> -    fi
>>> -    if test "$(echo ubsan.*)" != 'ubsan.*'; then
>>> -        echo "Undefined Behavior Sanitizer reported errors in:" ubsan.*
>>> -        cat ubsan.*
>>> +    if test "$(echo sanitizers.*)" != 'sanitizers.*'; then
>>> +        echo "Undefined Behavior Sanitizer or Address Sanitizer reported
>>> errors in:" sanitizers.*
>>> +        cat sanitizers.*
>>>          AT_FAIL_IF([:])
>>>      fi
>>>  }
>>> diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
>>> index c4cc8c9b2..7ee0b92b4 100644
>>> --- a/utilities/ovn-dbctl.c
>>> +++ b/utilities/ovn-dbctl.c
>>> @@ -237,6 +237,10 @@ cleanup:
>>>          }
>>>          free(commands);
>>>          if (error) {
>>> +            for (int i = 0; i < argc; i++) {
>>> +                free(argv_[i]);
>>> +            }
>>> +            free(argv_);
>>>              ctl_fatal("%s", error);
>>>          }
>>>      }
>>> --
>>> 2.30.2
>>>
>>> _______________________________________________
>>> dev mailing list
>>> dev@openvswitch.org
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>>
>>>
>>
>> --
>>
>> Ales Musil
>>
>> Senior Software Engineer - OVN Core
>>
>> Red Hat EMEA <https://www.redhat.com>
>>
>> amusil@redhat.com    IM: amusil
>> <https://red.ht/sig>
>> _______________________________________________
>> dev mailing list
>> dev@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>
Numan Siddique July 11, 2022, 7:19 p.m. UTC | #5
On Mon, Jul 11, 2022 at 1:45 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> On 7/11/22 19:55, Numan Siddique wrote:
> > On Mon, Jul 11, 2022 at 6:16 AM Ales Musil <amusil@redhat.com> wrote:
> >>
> >> Hi Igor,
> >>
> >> thank you for the patch. Yeah I was not quick enough to reply on the PR :)
> >>
> >> Acked-by: Ales Musil <amusil@redhat.com>
> >
> > Thanks for the patch.
> >
> > Can you please split this patch into 2 patches.
> >
> > Patch 1 to fix the memory leak in utilities/ovn-dbctl.c and the patch
> > 2 with the other changes.  This way we can backport the memory fix
> > patch to the other branches.
>
> I'd normally agree with this but I don't really think that we need to
> backport the memleak fix.  That's unless we want to backport the rest
> too.  The "leak" is benign, we call ctl_fatal() just after so the memory
> is not really leaked.
>
> Splitting the patch in two is also OK, obviously. :)

Thanks Dumitru for the explanation.  I don't think there is a need to
split the patch.

I applied this patch to the main branch.

Numan

>
> Regards,
> Dumitru
>
> >
> > Numan
> >
> >>
> >>
> >> On Mon, Jul 11, 2022 at 1:10 PM Igor Zhukov <fsb4000@yandex.ru> wrote:
> >>
> >>> From: Igor Zhukov <ivzhukov@sbercloud.ru>
> >>>
> >>> Also fix typo in comments
> >>>
> >>> Also fix memory leak in utilities/ovn-dbctl.c
> >>>
> >>> Also add "-g" to CFLAGS to forbid autotools from adding "-g -O2"
> >>> (temporary solution)
> >>>
> >>> Signed-off-by: Igor Zhukov <ivzhukov@sbercloud.ru>
> >>> Acked-by: Dumitru Ceara <dceara@redhat.com>
> >>> Submitted-at: https://github.com/ovn-org/ovn/pull/139
> >>> ---
> >>>  .ci/linux-build.sh         | 16 +++++-----------
> >>>  .github/workflows/test.yml | 10 ++++------
> >>>  tests/atlocal.in           |  4 ++--
> >>>  tests/automake.mk          |  3 +--
> >>>  tests/ovs-macros.at        | 11 +++--------
> >>>  utilities/ovn-dbctl.c      |  4 ++++
> >>>  6 files changed, 19 insertions(+), 29 deletions(-)
> >>>
> >>> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> >>> index 570ddbace..8c6d751dc 100755
> >>> --- a/.ci/linux-build.sh
> >>> +++ b/.ci/linux-build.sh
> >>> @@ -28,20 +28,14 @@ function configure_ovn()
> >>>  save_OPTS="${OPTS} $*"
> >>>  OPTS="${EXTRA_OPTS} ${save_OPTS}"
> >>>
> >>> -# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable
> >>> it,
> >>> +# If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
> >>> enable them,
> >>>  # but only for OVN, not for OVS.  However, disable some optimizations for
> >>>  # OVS, to make sanitizer reports user friendly.
> >>> -if [ "$ASAN" ]; then
> >>> -    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common"
> >>> -    CFLAGS_ASAN="-fsanitize=address"
> >>> -    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}"
> >>> -fi
> >>> -
> >>> -if [ "$UBSAN" ]; then
> >>> +if [ "$SANITIZERS" ]; 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}"
> >>> +    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common -g"
> >>> +    CFLAGS_SANITIZERS="-fsanitize=address,undefined"
> >>> +    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_SANITIZERS}"
> >>>  fi
> >>>
> >>>  if [ "$CC" = "clang" ]; then
> >>> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> >>> index b24bc7a3b..e0de7c60e 100644
> >>> --- a/.github/workflows/test.yml
> >>> +++ b/.github/workflows/test.yml
> >>> @@ -20,8 +20,8 @@ jobs:
> >>>        M32:         ${{ matrix.m32 }}
> >>>        OPTS:        ${{ matrix.opts }}
> >>>        TESTSUITE:   ${{ matrix.testsuite }}
> >>> -      ASAN:        ${{ matrix.asan }}
> >>> -      UBSAN:       ${{ matrix.ubsan }}
> >>> +      SANITIZERS:  ${{ matrix.sanitizers }}
> >>> +      CFLAGS:      ${{ matrix.cflags }}
> >>>
> >>>      name: linux ${{ join(matrix.*, ' ') }}
> >>>      runs-on: ubuntu-20.04
> >>> @@ -41,10 +41,8 @@ jobs:
> >>>              testsuite:    system-test
> >>>            - compiler:     clang
> >>>              testsuite:    test
> >>> -            asan:         asan
> >>> -          - compiler:     clang
> >>> -            testsuite:    test
> >>> -            ubsan:        ubsan
> >>> +            sanitizers:   sanitizers
> >>> +            cflags:       -g
> >>>
> >>>            - compiler:     gcc
> >>>              testsuite:    test
> >>> diff --git a/tests/atlocal.in b/tests/atlocal.in
> >>> index b3a011f41..0b9a31276 100644
> >>> --- a/tests/atlocal.in
> >>> +++ b/tests/atlocal.in
> >>> @@ -211,10 +211,10 @@ export OVS_CTL_TIMEOUT
> >>>
> >>>  # Add some default flags to make the tests run better under Address
> >>>  # Sanitizer, if it was used for the build.
> >>>
> >>> -ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS
> >>>
> >>> +ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=sanitizers:$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
> >>>
> >>> +UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=sanitizers:$UBSAN_OPTIONS
> >>>  export UBSAN_OPTIONS
> >>> diff --git a/tests/automake.mk b/tests/automake.mk
> >>> index 9733e8fa0..dce9c9108 100644
> >>> --- a/tests/automake.mk
> >>> +++ b/tests/automake.mk
> >>> @@ -80,8 +80,7 @@ export ovs_srcdir
> >>>  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 -z "$$(find $(TESTSUITE_DIR) -name 'sanitizers.*')" && \
> >>>          test X'$(RECHECK)' = Xyes && "$$@" --recheck)
> >>>
> >>>  # Python Coverage support.
> >>> diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
> >>> index 1bb31f315..5a06fe956 100644
> >>> --- a/tests/ovs-macros.at
> >>> +++ b/tests/ovs-macros.at
> >>> @@ -224,14 +224,9 @@ m4_divert_pop([PREPARE_TESTS])
> >>>
> >>>  OVS_START_SHELL_HELPERS
> >>>  ovs_cleanup() {
> >>> -    if test "$(echo asan.*)" != 'asan.*'; then
> >>> -        echo "Address Sanitizer reported errors in:" asan.*
> >>> -        cat asan.*
> >>> -        AT_FAIL_IF([:])
> >>> -    fi
> >>> -    if test "$(echo ubsan.*)" != 'ubsan.*'; then
> >>> -        echo "Undefined Behavior Sanitizer reported errors in:" ubsan.*
> >>> -        cat ubsan.*
> >>> +    if test "$(echo sanitizers.*)" != 'sanitizers.*'; then
> >>> +        echo "Undefined Behavior Sanitizer or Address Sanitizer reported
> >>> errors in:" sanitizers.*
> >>> +        cat sanitizers.*
> >>>          AT_FAIL_IF([:])
> >>>      fi
> >>>  }
> >>> diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
> >>> index c4cc8c9b2..7ee0b92b4 100644
> >>> --- a/utilities/ovn-dbctl.c
> >>> +++ b/utilities/ovn-dbctl.c
> >>> @@ -237,6 +237,10 @@ cleanup:
> >>>          }
> >>>          free(commands);
> >>>          if (error) {
> >>> +            for (int i = 0; i < argc; i++) {
> >>> +                free(argv_[i]);
> >>> +            }
> >>> +            free(argv_);
> >>>              ctl_fatal("%s", error);
> >>>          }
> >>>      }
> >>> --
> >>> 2.30.2
> >>>
> >>> _______________________________________________
> >>> dev mailing list
> >>> dev@openvswitch.org
> >>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >>>
> >>>
> >>
> >> --
> >>
> >> Ales Musil
> >>
> >> Senior Software Engineer - OVN Core
> >>
> >> Red Hat EMEA <https://www.redhat.com>
> >>
> >> amusil@redhat.com    IM: amusil
> >> <https://red.ht/sig>
> >> _______________________________________________
> >> dev mailing list
> >> dev@openvswitch.org
> >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >>
> >
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
diff mbox series

Patch

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 570ddbace..8c6d751dc 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -28,20 +28,14 @@  function configure_ovn()
 save_OPTS="${OPTS} $*"
 OPTS="${EXTRA_OPTS} ${save_OPTS}"
 
-# If AddressSanitizer or UdefinedBehaviorSanitizer is requested, enable it,
+# If AddressSanitizer and UndefinedBehaviorSanitizer are requested, enable them,
 # but only for OVN, not for OVS.  However, disable some optimizations for
 # OVS, to make sanitizer reports user friendly.
-if [ "$ASAN" ]; then
-    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common"
-    CFLAGS_ASAN="-fsanitize=address"
-    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_ASAN}"
-fi
-
-if [ "$UBSAN" ]; then
+if [ "$SANITIZERS" ]; 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}"
+    CFLAGS="-O1 -fno-omit-frame-pointer -fno-common -g"
+    CFLAGS_SANITIZERS="-fsanitize=address,undefined"
+    OVN_CFLAGS="${OVN_CFLAGS} ${CFLAGS_SANITIZERS}"
 fi
 
 if [ "$CC" = "clang" ]; then
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b24bc7a3b..e0de7c60e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -20,8 +20,8 @@  jobs:
       M32:         ${{ matrix.m32 }}
       OPTS:        ${{ matrix.opts }}
       TESTSUITE:   ${{ matrix.testsuite }}
-      ASAN:        ${{ matrix.asan }}
-      UBSAN:       ${{ matrix.ubsan }}
+      SANITIZERS:  ${{ matrix.sanitizers }}
+      CFLAGS:      ${{ matrix.cflags }}
 
     name: linux ${{ join(matrix.*, ' ') }}
     runs-on: ubuntu-20.04
@@ -41,10 +41,8 @@  jobs:
             testsuite:    system-test
           - compiler:     clang
             testsuite:    test
-            asan:         asan
-          - compiler:     clang
-            testsuite:    test
-            ubsan:        ubsan
+            sanitizers:   sanitizers
+            cflags:       -g
 
           - compiler:     gcc
             testsuite:    test
diff --git a/tests/atlocal.in b/tests/atlocal.in
index b3a011f41..0b9a31276 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -211,10 +211,10 @@  export OVS_CTL_TIMEOUT
 
 # Add some default flags to make the tests run better under Address
 # Sanitizer, if it was used for the build.
-ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=asan:$ASAN_OPTIONS
+ASAN_OPTIONS=detect_leaks=1:abort_on_error=true:log_path=sanitizers:$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
+UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=true:log_path=sanitizers:$UBSAN_OPTIONS
 export UBSAN_OPTIONS
diff --git a/tests/automake.mk b/tests/automake.mk
index 9733e8fa0..dce9c9108 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -80,8 +80,7 @@  export ovs_srcdir
 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 -z "$$(find $(TESTSUITE_DIR) -name 'sanitizers.*')" && \
 	 test X'$(RECHECK)' = Xyes && "$$@" --recheck)
 
 # Python Coverage support.
diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
index 1bb31f315..5a06fe956 100644
--- a/tests/ovs-macros.at
+++ b/tests/ovs-macros.at
@@ -224,14 +224,9 @@  m4_divert_pop([PREPARE_TESTS])
 
 OVS_START_SHELL_HELPERS
 ovs_cleanup() {
-    if test "$(echo asan.*)" != 'asan.*'; then
-        echo "Address Sanitizer reported errors in:" asan.*
-        cat asan.*
-        AT_FAIL_IF([:])
-    fi
-    if test "$(echo ubsan.*)" != 'ubsan.*'; then
-        echo "Undefined Behavior Sanitizer reported errors in:" ubsan.*
-        cat ubsan.*
+    if test "$(echo sanitizers.*)" != 'sanitizers.*'; then
+        echo "Undefined Behavior Sanitizer or Address Sanitizer reported errors in:" sanitizers.*
+        cat sanitizers.*
         AT_FAIL_IF([:])
     fi
 }
diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
index c4cc8c9b2..7ee0b92b4 100644
--- a/utilities/ovn-dbctl.c
+++ b/utilities/ovn-dbctl.c
@@ -237,6 +237,10 @@  cleanup:
         }
         free(commands);
         if (error) {
+            for (int i = 0; i < argc; i++) {
+                free(argv_[i]);
+            }
+            free(argv_);
             ctl_fatal("%s", error);
         }
     }