From: "Alexander Tikhonov" <avtikhon@tarantool.org>
To: "Sergey Bronnikov" <sergeyb@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN
Date: Mon, 30 Mar 2020 10:53:15 +0300 [thread overview]
Message-ID: <1585554795.310811070@f527.i.mail.ru> (raw)
In-Reply-To: <20200327140632.GA77755@pony.bronevichok.ru>
[-- Attachment #1: Type: text/plain, Size: 8121 bytes --]
Hi Sergey, thanks for the review, we decided to have separate issue for the exclusions:
https://github.com/tarantool/tarantool/issues/4360
During fixing the exclusions step-by-step the new issues will be created for each of them if it will be needed.
>Пятница, 27 марта 2020, 17:06 +03:00 от Sergey Bronnikov <sergeyb@tarantool.org>:
>
>I have no objections, so LGTM.
>
>One question: there are some ASAN supressions related to our own code
>without reference to tickets or any other resource with explanation why
>we have added this supression or when we want to fix it. Looks like we
>decided to silently mute warnings and forget about it. Please clarify.
>
>Sergey
>
>On 13:50 Mon 20 Jan , Alexander V. Tikhonov wrote:
>> The change enables memory leaks detection to existing ASAN testing
>> routine and introduces suppression files with the corresponding
>> exception list:
>> * address sanitizer for compile-time: asan/asan.supp
>> * memory leak sanitizer for run-time: asan/lsan.supp
>>
>> Furthermore, added engine and replication suites for ASAN testing
>> routine.
>>
>> Additionally to the tests blacklisted within #4359,
>> 'box/on_shutdown.test.lua' is also disabled since it fails the
>> introduced leak check. All blacklisted tests have to be enabled
>> within #4360.
>>
>> Close #2058
>> ---
>> .travis.mk | 17 ++++--
>> asan/asan.supp | 17 ++++++
>> asan/lsan.supp | 105 ++++++++++++++++++++++++++++++++++
>> cmake/profile.cmake | 4 +-
>> test/box/on_shutdown.skipcond | 7 +++
>> 5 files changed, 142 insertions(+), 8 deletions(-)
>> create mode 100644 asan/asan.supp
>> create mode 100644 asan/lsan.supp
>> create mode 100644 test/box/on_shutdown.skipcond
>>
>> diff --git a/.travis.mk b/.travis.mk
>> index 42969ff56..efbc00ba1 100644
>> --- a/.travis.mk
>> +++ b/.travis.mk
>> @@ -111,15 +111,20 @@ coverage_debian: deps_debian test_coverage_debian_no_deps
>> # ASAN
>>
>> build_asan_debian:
>> - CC=clang-8 CXX=clang++-8 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
>> - CC=clang-8 CXX=clang++-8 cmake . -DENABLE_ASAN=ON ${CMAKE_EXTRA_PARAMS}
>> + CC=clang-8 CXX=clang++-8 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo \
>> + -DENABLE_WERROR=ON -DENABLE_ASAN=ON ${CMAKE_EXTRA_PARAMS}
>> make -j
>>
>> test_asan_debian_no_deps: build_asan_debian
>> - # temporary excluded engine/ and replication/ suites with some tests from other suites by issue #4360
>> - cd test && ASAN=ON ASAN_OPTIONS=detect_leaks=0 ./test-run.py --force $(TEST_RUN_EXTRA_PARAMS) \
>> - app/ app-tap/ box/ box-py/ box-tap/ engine_long/ long_run-py/ luajit-tap/ \
>> - replication-py/ small/ sql/ sql-tap/ swim/ unit/ vinyl/ wal_off/ xlog/ xlog-py/
>> + # Temporary excluded some tests by issue #4360:
>> + # - To exclude tests from ASAN checks the asan/asan.supp file
>> + # was set at the build time in cmake/profile.cmake file.
>> + # - To exclude tests from LSAN checks the asan/lsan.supp file
>> + # was set in environment options to be used at run time.
>> + cd test && ASAN=ON \
>> + LSAN_OPTIONS=suppressions=${PWD}/asan/lsan.supp \
>> + ASAN_OPTIONS=heap_profile=0:unmap_shadow_on_exit=1:detect_invalid_pointer_pairs=1:symbolize=1:detect_leaks=1:dump_instruction_bytes=1:print_suppressions=0 \
>> + ./test-run.py --force $(TEST_RUN_EXTRA_PARAMS)
>>
>> test_asan_debian: deps_debian deps_buster_clang_8 test_asan_debian_no_deps
>>
>> diff --git a/asan/asan.supp b/asan/asan.supp
>> new file mode 100644
>> index 000000000..2a20114f4
>> --- /dev/null
>> +++ b/asan/asan.supp
>> @@ -0,0 +1,17 @@
>> +# File format:
>> +#fun:*
>> +#src:*
>> +
>> +# !test: app-tap/json.test.lua
>> +# source: third_party/lua-cjson/lua_cjson.c
>> +fun:json_decode
>> +
>> +# test: unit/base64.test.lua
>> +# source: third_party/base64.c
>> +fun:base64_decode_block
>> +# source: test/unit/base64.c
>> +fun:base64_test
>> +
>> +# !test: unit/msgpack.test
>> +# source: src/lib/msgpuck/test/msgpuck.c
>> +fun:test_mp_print
>> diff --git a/asan/lsan.supp b/asan/lsan.supp
>> new file mode 100644
>> index 000000000..a1237fb86
>> --- /dev/null
>> +++ b/asan/lsan.supp
>> @@ -0,0 +1,105 @@
>> +# File format:
>> +#leak:*
>> +
>> +# test: app/crypto.test.lua
>> +# source: /usr/lib/x86_64-linux-gnu/libcrypto.so
>> +leak:CRYPTO_zalloc
>> +
>> +# test: app-tap/http_client.test.lua
>> +# source: src/tarantool
>> +leak:Curl_setstropt
>> +leak:create_conn
>> +leak:Curl_conncache_add_conn
>> +leak:alloc_addbyter
>> +leak:Curl_getaddrinfo_ex
>> +leak:Curl_cache_addr
>> +leak:Curl_hash_init
>> +leak:Curl_hash_add
>> +leak:Curl_he2ai
>> +leak:Curl_open
>> +leak:Curl_resolver_init
>> +
>> +# test: app-tap/iconv.test.lua
>> +# source: /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
>> +leak:gconv_init
>> +
>> +# test: box*/
>> +# source: third_party/luajit
>> +leak:lj_BC_FUNCC
>> +
>> +# test: box/access.test.lua
>> +# test: box/access_bin.test.lua
>> +# test: box/access_misc.test.lua
>> +# source: src/box/error.cc
>> +leak:AccessDeniedError::AccessDeniedError
>> +
>> +# test: box/bitset.test.lua
>> +# source: src/lib/bitset/iterator.c
>> +leak:tt_bitset_iterator_init
>> +
>> +# test: box-py/args.test.py
>> +# source: /lib/x86_64-linux-gnu/libc.so*
>> +leak:libc.so*
>> +
>> +# test: box-tap/schema-mt.test.lua
>> +# source: src/lib/core/coio_task.c
>> +leak:coio_on_start
>> +# source: src/lib/salad/mhash.h
>> +leak:mh_i32ptr_new
>> +
>> +# test: replication/misc.test.lua
>> +# source: src/box/vy_log.c
>> +leak:vy_recovery_new_f
>> +# source: src/lib/salad/mhash.h
>> +leak:mh_i64ptr_new
>> +
>> +# test: sql-tap/gh2250-trigger-chain-limit.test.lua
>> +# source: src/lib/core/exception.cc
>> +leak:Exception::operator new
>> +
>> +# test: sql-tap/trigger9.test.lua
>> +# source: src/lib/core/fiber.c
>> +leak:cord_start
>> +
>> +# test: sql-tap/tkt-7bbfb7d442.test.lua
>> +# test: sql-tap/view.test.lua
>> +# test: sql-tap/with1.test.lua
>> +# test: sql-tap/with2.test.lua
>> +# source: src/box/sql/malloc.c
>> +leak:sql_sized_malloc
>> +
>> +# test: swim/errinj.test.lua
>> +# test: swim/swim.test.lua
>> +# source: src/lib/swim/swim.c
>> +leak:swim_member_new
>> +leak:swim_update_member_payload
>> +
>> +# !test: unit/bps_tree.test.lua
>> +# source: src/lib/salad/bps_tree.h
>> +leak:bps_tree_test_create_leaf
>> +leak:bps_tree_test_process_insert_leaf
>> +
>> +# !test: unit/heap.test.lua
>> +# source: test/unit/heap.c
>> +leak:test_random_delete_workload
>> +leak:test_delete_last_node
>> +
>> +# !test: unit/heap_iterator.test.lua
>> +# source: src/lib/salad/heap.h
>> +leak:test_heap_reserve
>> +
>> +# !test: unit/swim.test.lua
>> +# source: src/lib/swim/swim_io.c
>> +leak:swim_scheduler_set_codec
>> +
>> +# test: vinyl/errinj.test.lua
>> +# source: src/lib/core/fiber.h
>> +leak:fiber_cxx_invoke
>> +
>> +# test: vinyl/errinj_ddl.test.lua
>> +# source: src/box/vy_stmt.c
>> +leak:vy_stmt_alloc
>> +
>> +# test: vinyl/recover.test.lua
>> +# source: src/lib/core/fiber.c
>> +leak:cord_costart_thread_func
>> diff --git a/cmake/profile.cmake b/cmake/profile.cmake
>> index 0ba31fa2c..bc4bf67f5 100644
>> --- a/cmake/profile.cmake
>> +++ b/cmake/profile.cmake
>> @@ -53,7 +53,7 @@ if (ENABLE_ASAN)
>> "\n")
>> endif()
>>
>> - set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
>> + set(CMAKE_REQUIRED_FLAGS "-fsanitize=address -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/asan/asan.supp")
>> check_c_source_compiles("int main(void) {
>> #include <sanitizer/asan_interface.h>
>> void *x;
>> @@ -76,5 +76,5 @@ if (ENABLE_ASAN)
>> message(FATAL_ERROR "Cannot enable AddressSanitizer")
>> endif()
>>
>> - add_compile_flags("C;CXX" -fsanitize=address)
>> + add_compile_flags("C;CXX" -fsanitize=address -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/asan/asan.supp)
>> endif()
>> diff --git a/test/box/on_shutdown.skipcond b/test/box/on_shutdown.skipcond
>> new file mode 100644
>> index 000000000..e46fd1088
>> --- /dev/null
>> +++ b/test/box/on_shutdown.skipcond
>> @@ -0,0 +1,7 @@
>> +import os
>> +
>> +# Disabled at ASAN build due to issue #4360.
>> +if os.getenv("ASAN") == 'ON':
>> + self.skip = 1
>> +
>> +# vim: set ft=python:
>> --
>> 2.17.1
>>
>--
>sergeyb@
--
Alexander Tikhonov
[-- Attachment #2: Type: text/html, Size: 9840 bytes --]
next prev parent reply other threads:[~2020-03-30 7:53 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-20 10:50 [Tarantool-patches] [PATCH v2 0/2] " Alexander V. Tikhonov
2020-01-20 10:50 ` [Tarantool-patches] [PATCH v2 1/2] test: use default replication connection timeout Alexander V. Tikhonov
2020-03-27 14:07 ` Sergey Bronnikov
2020-01-20 10:50 ` [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN Alexander V. Tikhonov
2020-03-27 14:06 ` Sergey Bronnikov
2020-03-30 7:53 ` Alexander Tikhonov [this message]
2020-03-30 8:09 ` Sergey Bronnikov
2020-04-01 11:04 ` Alexander Tikhonov
2020-01-21 14:25 ` [Tarantool-patches] [PATCH v2 0/2] " Igor Munkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1585554795.310811070@f527.i.mail.ru \
--to=avtikhon@tarantool.org \
--cc=sergeyb@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox