# Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; version 2
# of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

#
# Suppress some common (not fatal) errors in system libraries found by valgrind
#

#
# Pthread doesn't free all thread specific memory before program exists
#
{
   pthread allocate_tls memory loss
   Memcheck:Leak
   fun:calloc
   fun:_dl_allocate_tls
   fun:allocate_stack
   fun:pthread_create*
}

{
   pthread allocate_tls memory loss
   Memcheck:Leak
   fun:calloc
   fun:_dl_allocate_tls
   fun:pthread_create*

}

{
   pthead_exit memory loss 1
   Memcheck:Leak
   fun:malloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
}

{
   pthread_exit memory loss 2
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object
   fun:dl_open_worker
}

{
   pthread_exit memory loss 3
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object_deps
   fun:dl_open_worker
}

{
   pthread_exit memory loss 4
   Memcheck:Leak
   fun:calloc
   fun:_dl_check_map_versions
   fun:dl_open_worker
}

{
   pthread_exit memory loss 5
   Memcheck:Leak
   fun:calloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
}

{
   pthread allocate_dtv memory loss
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls_storage
   fun:__GI__dl_allocate_tls
   fun:pthread_create
}

{
   pthread allocate_dtv memory loss second
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls
   fun:pthread_create*
}

{
   pthread memalign memory loss
   Memcheck:Leak
   fun:memalign
   fun:_dl_allocate_tls_storage
   fun:__GI__dl_allocate_tls
   fun:pthread_create
}

{
   pthread pthread_key_create
   Memcheck:Leak
   fun:malloc
   fun:*
   fun:*
   fun:pthread_key_create
   fun:my_thread_global_init
}

{
   pthread strstr uninit
   Memcheck:Cond
   fun:strstr
   obj:/lib/tls/libpthread.so.*
   obj:/lib/tls/libpthread.so.*
   fun:call_init
   fun:_dl_init
   obj:/lib/ld-*.so
}

{
   pthread strstr uninit
   Memcheck:Cond
   fun:strstr
   obj:/lib/tls/libpthread.so.*
   obj:/lib/tls/libpthread.so.*
   fun:call_init
   fun:_dl_init
   obj:/lib/ld-*.so
}

{
   strlen/_dl_init_paths/dl_main/_dl_sysdep_start(Cond)
   Memcheck:Cond
   fun:strlen
   fun:_dl_init_paths
   fun:dl_main
   fun:_dl_sysdep_start
}

{
   pthread errno
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlsym
   fun:__errno_location
}


#
# Warnings in libz becasue it works with aligned memory(?)
#

{
   libz tr_flush_block
   Memcheck:Cond
   fun:_tr_flush_block
   fun:deflate_slow
   fun:deflate
   fun:do_flush
   fun:gzclose
}

{
   libz tr_flush_block2
   Memcheck:Cond
   fun:_tr_flush_block
   fun:deflate_slow
   fun:deflate
   fun:compress2
}

{
   libz longest_match
   Memcheck:Cond
   fun:longest_match
   fun:deflate_slow
   fun:deflate
}

{
   libz deflate
   Memcheck:Cond
   obj:*/libz.so.*
   obj:*/libz.so.*
   fun:deflate
   fun:compress2
}

{
   libz deflate2
   Memcheck:Cond
   obj:*/libz.so.*
   obj:*/libz.so.*
   fun:deflate
   obj:*/libz.so.*
   fun:gzflush
}

{
   libz deflate3
   Memcheck:Cond
   obj:*/libz.so.*
   obj:*/libz.so.*
   fun:deflate
   fun:do_flush
}

{
  libz deflate4
  Memcheck:Param
  write(buf)
  fun:*
  fun:my_write
  fun:do_flush
  fun:azclose
}

#
# Warning from my_thread_init becasue mysqld dies before kill thread exists
#

{
   my_thread_init kill thread memory loss second
   Memcheck:Leak
   fun:calloc
   fun:my_thread_init
   fun:kill_server_thread
}


# Red Hat AS 4 32 bit
{
   dl_relocate_object
   Memcheck:Cond
   fun:_dl_relocate_object
}

#
# Warning from my_thread_init becasue mysqld dies before kill thread exists
#

{
   my_thread_init kill thread memory loss second
   Memcheck:Leak
   fun:calloc
   fun:my_thread_init
   fun:kill_server_thread
}

#
# Leaks reported in _dl_* internal functions on Linux amd64 / glibc2.3.2.
#

{
   _dl_start invalid write8
   Memcheck:Addr8
   fun:_dl_start
}

{
   _dl_start invalid write4
   Memcheck:Addr4
   fun:_dl_start
}

{
   _dl_start/_dl_setup_hash invalid read8
   Memcheck:Addr8
   fun:_dl_setup_hash
   fun:_dl_start
}

{
   _dl_sysdep_start invalid write8
   Memcheck:Addr8
   fun:_dl_sysdep_start
}

{
   _dl_init invalid write8
   Memcheck:Addr8
   fun:_dl_init
}

{
   _dl_init invalid write4
   Memcheck:Addr4
   fun:_dl_init
}

{
   _dl_init/_dl_init invalid read8
   Memcheck:Addr8
   fun:_dl_debug_initialize
   fun:_dl_init
}

{
   _dl_init/_dl_debug_state invalid read8
   Memcheck:Addr8
   fun:_dl_debug_state
   fun:_dl_init
}

{
   init invalid write8
   Memcheck:Addr8
   fun:init
}

{
   fixup invalid write8
   Memcheck:Addr8
   fun:fixup
}

{
   fixup/_dl_lookup_versioned_symbol invalid read8
   Memcheck:Addr8
   fun:_dl_lookup_versioned_symbol
   fun:fixup
}

{
   _dl_runtime_resolve invalid read8
   Memcheck:Addr8
   fun:_dl_runtime_resolve
}

{
   __libc_start_main invalid write8
   Memcheck:Addr8
   fun:__libc_start_main
}

{
   __libc_start_main/__sigjmp_save invalid write4
   Memcheck:Addr4
   fun:__sigjmp_save
   fun:__libc_start_main
}

#
# These seem to be libc threading stuff, not related to MySQL code (allocations
# during pthread_exit()). Googling shows other projects also using these
# suppressions.
#
# Note that these all stem from pthread_exit() deeper in the call stack, but
# Valgrind only allows the top four calls in the suppressions.
#

{
   libc pthread_exit 1
   Memcheck:Leak
   fun:malloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   libc pthread_exit 2
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
}

{
   libc pthread_exit 3
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
}

{
   libc pthread_exit 4
   Memcheck:Leak
   fun:calloc
   fun:_dl_check_map_versions
   fun:dl_open_worker
   fun:_dl_catch_error
}

{
   libc pthread_exit 5
   Memcheck:Leak
   fun:calloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   libc pthread_exit 6
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
}

{
   libc pthread_exit 7
   Memcheck:Leak
   fun:malloc
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
}

{
   libc pthread_exit 8
   Memcheck:Leak
   fun:malloc
   fun:local_strdup
   fun:_dl_map_object
   fun:dl_open_worker
}

#
# This is seen internally in the system libraries on 64-bit RHAS3.
#

{
   __lll_mutex_unlock_wake uninitialized
   Memcheck:Param
   futex(utime)
   fun:__lll_mutex_unlock_wake
}

#
# BUG#19940: NDB sends uninitialized parts of field buffers across the wire.
# This is "works as designed"; the uninitialized part is not used at the
# other end (but Valgrind cannot see this).
#
{
   bug19940
   Memcheck:Param
   socketcall.sendto(msg)
   fun:send
   fun:_ZN15TCP_Transporter6doSendEv
   fun:_ZN19TransporterRegistry11performSendEv
   fun:_ZN19TransporterRegistry14forceSendCheckEi
}
# Warning when printing stack trace (to suppress some not needed warnings)
#

{
   vprintf on stacktrace
   Memcheck:Cond
   fun:vfprintf
   fun:uffered_vfprintf
   fun:vfprintf
   fun:fprintf
   fun:print_stacktrace
}

#
# Safe warnings, that may happen because of thread scheduling
#

{
   dbug initialization by kill_server
   Memcheck:Leak
   fun:malloc
   fun:DbugMalloc
   fun:code_state
   fun:_db_enter_
   fun:kill_server
}

#
# Warning caused by small memory leak in threaded dlopen
#

{
   dlopen threaded memory leak
   Memcheck:Leak
   fun:calloc
   obj:*/libdl-*.so
   fun:dlopen*
}

#
# Pthread doesn't free all thread specific memory before program exists
#
{
   pthread allocate_tls memory loss in 2.6.1.
   Memcheck:Leak
   fun:calloc
   obj:*/ld-*.so
   fun:_dl_allocate_tls
   fun:pthread_create*
}

{
   buf_buddy_relocate peeking (space,page) in potentially free blocks
   Memcheck:Addr1
   fun:buf_buddy_relocate
}

#
# Bug#56666 is fixed by WL#6407
# Also, as part of WL#6407, call to shutdown_performance_schema()
# is uncommented in sql/mysqld.cc. As this call was commented out
# for long time, there are still some leaks which needs to be
# addressed by pfs.
{
   missing shutdown_performance_schema 1b
   Memcheck:Leak
   fun:memalign
   fun:posix_memalign
   fun:_Z10pfs_mallocmi
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 2
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_alloc_new
   fun:lf_hash_insert
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 2-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_alloc_new
   fun:lf_hash_insert
}

#
# Note that initialize_bucket() is reccursive,
# can't provide more stack context.
#
# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 3a
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:initialize_bucket
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 3a-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:initialize_bucket
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 3b
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:initialize_bucket
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 3b-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:initialize_bucket
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 4
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_pinbox_get_pins
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 4-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_pinbox_get_pins
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 5
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_insert
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 5-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_insert
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 6
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_delete
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 6-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_delete
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 7
   Memcheck:Leak
   fun:malloc
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_search
}

# The '...' wildcard is for 'fun:my_raw_malloc' which is hidden with HAVE_VALGRIND
{
   missing shutdown_performance_schema 7-mem
   Memcheck:Leak
   ...
   fun:my_malloc
   fun:lf_dynarray_lvalue
   fun:lf_hash_search
}

{
   Bug 59874 Valgrind warning in InnoDB compression code
   Memcheck:Cond
   fun:*
   fun:*
   fun:deflate
   fun:btr_store_big_rec_extern_fields_func
   fun:row_ins_index_entry_low
   fun:row_ins_index_entry
   fun:row_ins_index_entry_step
   fun:row_ins
   fun:row_ins_step
   fun:row_insert_for_mysql
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   fun:*
   fun:*
   fun:deflate
   fun:page_zip_compress
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   fun:*
   fun:*
   fun:deflate
   fun:page_zip_compress_deflate
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   obj:*/libz.so*
   obj:*/libz.so*
   fun:deflate
   fun:page_zip_compress
   fun:page_zip_reorganize
   fun:page_cur_insert_rec_zip_reorg
   fun:page_cur_insert_rec_zip
   fun:page_cur_tuple_insert
   fun:btr_cur_optimistic_insert
   fun:btr_cur_pessimistic_insert
   fun:row_ins_index_entry_low
   fun:row_ins_index_entry
   fun:row_ins_index_entry_step
   fun:row_ins
   fun:row_ins_step
   fun:row_insert_for_mysql
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   obj:*/libz.so*
   obj:*/libz.so*
   fun:deflate
   fun:page_zip_compress
   fun:page_zip_reorganize
   fun:page_cur_insert_rec_zip_reorg
   fun:page_cur_insert_rec_zip
   fun:page_cur_tuple_insert
   fun:btr_cur_optimistic_insert
   fun:row_ins_index_entry_low
   fun:row_ins_index_entry
   fun:row_ins_index_entry_step
   fun:row_ins
   fun:row_ins_step
   fun:row_insert_for_mysql
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   obj:*/libz.so*
   obj:*/libz.so*
   fun:deflate
   fun:page_zip_compress
   fun:page_copy_rec_list_end
   fun:page_move_rec_list_end
   fun:btr_page_split_and_insert
   fun:btr_root_raise_and_insert
   fun:btr_cur_pessimistic_insert
   fun:row_ins_index_entry_low
   fun:row_ins_index_entry
   fun:row_ins_index_entry_step
   fun:row_ins
   fun:row_ins_step
   fun:row_insert_for_mysql
}

{
   In page0zip.c we have already checked that the memory is initialized before calling deflate()
   Memcheck:Cond
   obj:*/libz.so*
   obj:*/libz.so*
   fun:deflate
   fun:page_zip_compress
   fun:page_cur_insert_rec_zip_reorg
   fun:page_cur_insert_rec_zip
   fun:page_cur_tuple_insert
   fun:btr_cur_optimistic_insert
   fun:btr_cur_pessimistic_insert
   fun:row_ins_index_entry_low
   fun:row_ins_index_entry
   fun:row_ins_index_entry_step
   fun:row_ins
   fun:row_ins_step
   fun:row_insert_for_mysql
}

{
   Bug 59875 Valgrind warning in buf0buddy.c
   Memcheck:Addr1
   fun:mach_read_from_4
   fun:buf_buddy_relocate
   fun:buf_buddy_free_low
   fun:buf_buddy_free
}

#
# NDB packfrm vs deflate
#
{
   NDB packfrm case 1
   Memcheck:Cond
   fun:deflate_slow
   fun:deflate
   fun:compress
   fun:my_compress_alloc
   fun:my_compress
   fun:packfrm
}

{
   NDB packfrm case 2
   Memcheck:Cond
   fun:longest_match
   fun:deflate_slow
   fun:deflate
   fun:compress
   fun:my_compress_alloc
   fun:my_compress
   fun:packfrm
}

#
# pfs vs compress
#
{
   pfs vs. compress case 1
   Memcheck:Cond
   fun:longest_match
   fun:deflate_slow
   fun:deflate
   fun:compress
   fun:my_compress_alloc
   fun:my_compress
}

{
   pfs vs. compress case 2
   Memcheck:Cond
   fun:deflate_slow
   fun:deflate
   fun:compress
   fun:my_compress_alloc
   fun:my_compress
}

# Note the wildcard in the (mangled) function signatures of
# write_keys() and find_all_keys().
# They both return ha_rows, which is platform dependent.
#
# The '...' wildcards are for 'fun:inline_mysql_file_write' which *may*
# be inlined.
{
   Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / one
   Memcheck:Param
   write(buf)
   ...
   fun:my_b_flush_io_cache
   fun:_my_b_write
   fun:_Z*10write_keysP10Sort_paramP13Filesort_infojP11st_io_cacheS4_
   ...
   fun:_Z8filesortP3THDP8FilesortbPyS3_S3_
}

{
   Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / three
   Memcheck:Param
   write(buf)
   ...
   fun:my_b_flush_io_cache
   fun:_Z8filesortP3THDP8FilesortbPyS3_S3_
}

{
   OpenSSL still reachable.
   Memcheck:Leak
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   ...
   fun:SSL_COMP_get_compression_methods
   fun:SSL_library_init
}

{
   OpenSSL still reachable.
   Memcheck:Leak
   fun:malloc
   fun:CRYPTO_malloc
   fun:engine_cleanup_add_last
   fun:ENGINE_add
}

{
   OpenSSL still reachable.
   Memcheck:Leak
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   fun:engine_cleanup_add_last
   fun:ENGINE_add
}

{
   OpenSSL still reachable.
   Memcheck:Leak
   fun:malloc
   fun:CRYPTO_malloc
   fun:ENGINE_new
}

{
   Bug#16039908 "BYTES STILL REACHABLE" IN VALGRIND TEST ON 5.6/TRUNK
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlclose
   fun:_ZL15free_plugin_memP12st_plugin_dl
   fun:_ZL13plugin_dl_delPK19st_mysql_lex_string
   fun:_ZL10plugin_delP13st_plugin_int
   fun:_ZL12reap_pluginsv
   fun:_Z15plugin_shutdownv
   fun:_Z*8clean_upb*
}

{
   main.udf gives similar warning as Bug#16039908
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlclose
   fun:_Z8udf_freev
   fun:_Z*8clean_upb*
}

#Suppress warnings from glibc implementation of 'malloc_info' 
{
   Malloc_info uninitialised value of size 8
   Memcheck:Value8
   fun:_itoa_word
   fun:vfprintf
   fun:fprintf
   fun:mi_arena.*
   fun:malloc_info
}

{
   Malloc_info conditional jump depends on uninitialised values
   Memcheck:Cond
   ...
   fun:mi_arena.*
   fun:malloc_info
}


#supress warnings from openssl random generator

{
   OpenSSL conditional jump in ssl3_ctx_ctrl
   Memcheck:Cond
   ...
   fun:ssl3_ctx_ctrl
   fun:new_VioSSLFd
}

{
   OpenSSL uninitialised value of size 8 in new_VioSSLFd
   Memcheck:Value8
   fun:BN_num_bits_word
   fun:BN_num_bits
   ...
   fun:new_VioSSLFd
}

{
   OpenSSL uninitialised value of size 8 in new_VioSSLFd
   Memcheck:Value8
   fun:BN_mod_exp_mont_consttime
   ...
   fun:new_VioSSLFd
}

{
   OpenSSL PB2 / 1
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   fun:SSL_COMP_get_compression_methods
   fun:SSL_library_init
   fun:ssl_start
   fun:_Z8init_sslv
   fun:_Z11mysqld_mainiPPc
   fun:main
}

{
   OpenSSL PB2 / 2
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   fun:SSL_COMP_get_compression_methods
   fun:SSL_library_init
   fun:ssl_start
   fun:_ZL8init_sslv
   fun:_Z11mysqld_mainiPPc
   fun:main
}


{
   OpenSSL libstdc++ version 5 / one
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   obj:/lib/x86_64-linux-gnu/libssl.so.1.0.0
   fun:SSL_COMP_get_compression_methods
   fun:SSL_library_init
   fun:ssl_start
   fun:_ZL8init_sslv
   fun:_Z11mysqld_mainiPPc
   fun:main
}

{
   OpenSSL libstdc++ version 5 / two
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:sk_new
   obj:/lib/x86_64-linux-gnu/libssl.so.1.0.0
   fun:SSL_COMP_get_compression_methods
   fun:SSL_library_init
   fun:ssl_start
   fun:_ZL8init_sslv
   fun:_Z11mysqld_mainiPPc
   fun:main
}

{
   OpenSSL libstdc++ version 5 / three
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   obj:/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
   fun:call_init.part.0
   fun:call_init
   fun:_dl_init
}

# supress uninitialized because some SSL libraries do random like that
{
   OpenSSL conditional jump in generate_user_salt due to randomness
   Memcheck:Cond
   fun:generate_user_salt
   fun:native_password_authenticate
}

{
   General protobuf globals
   Memcheck:Leak
   fun:_Znwm
   ...
   fun:_GLOBAL__sub_I_mysqlx*.pb.cc
   ...
}


{
   mysqlx plugin install
   Memcheck:Leak
   fun:*alloc
   ...
   fun:_dl_catch_error
   ...
   fun:dlopen*
   ...
   fun:_ZL13plugin_dl_addPK19st_mysql_lex_stringi*
   ...
}

# supress inability to cleanup OpenSSL error contexts in GR
{
   OpenSSL GR suppress leak 1
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:ERR_get_state
   fun:ERR_clear_error
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   fun:_ZN14Trans_delegate13before_commitEP3THDbP11st_io_cacheS3_y
   fun:_ZN13MYSQL_BIN_LOG6commitEP3THDb
   fun:_Z17trans_commit_stmtP3THD
}

{
   OpenSSL GR suppress leak 2
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:ERR_get_state
   fun:ERR_clear_error
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   fun:_ZN14Trans_delegate13before_commitEP3THDbP11st_io_cacheS3_y
   fun:_ZN13MYSQL_BIN_LOG6commitEP3THDb
   fun:_Z15ha_commit_transP3THDbb
}

{
   OpenSSL GR suppress leak 3
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:lh_insert
   fun:int_thread_set_item
   fun:ERR_get_state
   fun:ERR_clear_error
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   fun:_ZN14Trans_delegate13before_commitEP3THDbP11st_io_cacheS3_y
}

{
   OpenSSL GR suppress leak 4
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:CRYPTO_malloc
   fun:lh_new
   fun:int_thread_get
   fun:int_thread_set_item
   fun:ERR_get_state
   fun:ERR_put_error
   fun:PEM_read_bio
   fun:PEM_X509_INFO_read_bio
   fun:X509_load_cert_crl_file
   fun:by_file_ctrl
   fun:X509_STORE_load_locations
   obj:*
   obj:*
   obj:*
   obj:*
}

{
  OpenSSL still reachable.
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  ...
  fun:ERR_peek_error
  fun:vio_ssl_read
  ...
}

{
  OpenSSL still reachable.
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  ...
  fun:ERR_peek_error
  ...
  fun:sslaccept
  ...
  fun:server_mpvio_read_packet
  ...
}

#
# Rules to suppress leaks from plugin dependencies
#

{
  TPL leak 1
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:BUF_strndup
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 2
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:BUF_strndup
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 3
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:lh_insert
  fun:int_thread_set_item
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 4
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:sk_new
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 5
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:sk_new
  fun:SSL_COMP_get_compression_methods
  fun:SSL_library_init
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 6
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 7
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 8
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:lh_new
  fun:int_thread_get
  fun:int_thread_set_item
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 9
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 10
  Memcheck:Leak
  match-leak-kinds: definite
  fun:malloc
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{ 
  TPL leak 11
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:ERR_get_state
  fun:ERR_put_error
  fun:PEM_read_bio
  fun:PEM_X509_INFO_read_bio
  fun:X509_load_cert_crl_file
  fun:by_file_ctrl
  fun:X509_STORE_load_locations
  obj:*
  obj:* 
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
}

{
  TPL leak 12
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:BUF_strndup
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 13
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 14
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:sk_new
  fun:SSL_COMP_get_compression_methods
  fun:SSL_library_init
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 15
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:lh_insert
  fun:int_thread_set_item
  fun:ERR_get_state
  fun:ERR_put_error
  fun:PEM_read_bio
  fun:PEM_X509_INFO_read_bio
  fun:X509_load_cert_crl_file
  fun:by_file_ctrl
  fun:X509_STORE_load_locations
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 16
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:realloc
  fun:CRYPTO_realloc
  fun:sk_insert
  fun:CONF_module_add
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 17
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:lh_insert
  fun:int_thread_set_item
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 18
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:lh_insert
  fun:int_thread_set_item
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 19
  Memcheck:Leak
  match-leak-kinds: reachable
  fun:malloc
  fun:CRYPTO_malloc
  fun:ERR_get_state
  fun:ERR_clear_error
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
}

{
  TPL leak 20
  Memcheck:Leak
  match-leak-kinds: definite
  fun:malloc
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

{
  TPL leak 21
  Memcheck:Leak
  match-leak-kinds: possible
  fun:malloc
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  obj:*
  fun:_ZL17plugin_initializeP13st_plugin_int
  ...
}

# Bug #25964438  LDAP: ASAN AND VALGRIND ISSUES
{
   LDAP_TLS_workaround1
   Memcheck:Leak
   fun:calloc
   ...
   ...
   ...
   ...
   ...
   fun:ldap_int_tls_start
   fun:ldap_start_tls_s
   fun:*establish_tls*
   fun:*create*
}
{
   LDAP_TLS_workaround2
   Memcheck:Leak
   fun:malloc
   ...
   ...
   ...
   ...
   ...
   fun:ldap_int_tls_start
   fun:ldap_start_tls_s
   fun:*establish_tls*
   fun:*create*
}
{
   LDAP_TLS_workaround3
   Memcheck:Leak
   fun:calloc
   fun:PR_LoadLibraryWithFlags
   ...
   ...
   ...
   fun:PR_CallOnce
   ...
   ...
   fun:_dl_init
}
{
   LDAP_TLS_workaround4
   Memcheck:Leak
   fun:malloc
   fun:PR_ErrorInstallTable
   fun:PR_CallOnce
   ...
   ...
   fun:PR_CallOnceWithArg
   ...
   fun:NSS_SetDomesticPolicy
   ...
   fun:PR_CallOnceWithArg
   ...
   ...
   ...
   fun:ldap_int_tls_start
   fun:ldap_start_tls_s
   fun:*establish_tls*
}
{
   LDAP_TLS_workaround5
   Memcheck:Leak
   fun:malloc
   ...
   fun:PR_LoadLibraryWithFlags
   ...
   ...
   ...
   fun:PR_CallOnce
   ...
   ...
   ...
   ...
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
}
{
   LDAP_TLS_workaround6
   Memcheck:Leak
   fun:malloc
   fun:ber_memalloc_x
   fun:ber_strdup_x
   ...
   fun:ldap_int_initialize
   fun:ldap_create
   fun:ldap_initialize
   fun:*create*
}
{
   LDAP_TLS_workaround7
   Memcheck:Leak
   fun:malloc
   fun:*dl_close_worker*
   fun:*dl_close*
   fun:*dl_catch_error*
   fun:*libc_dlclose*
   fun:*free_mem*
   fun:*libc_freeres*
   fun:*vgnU_freeres*
   fun:*run_exit_handlers*
   fun:exit*
   fun:*mysqld_exit*
   fun:*mysqld_main*
   fun:*main*
}
{
   LDAP_TLS_workaround8
   Memcheck:Leak
   fun:malloc
   fun:ber_memalloc_x
   fun:ber_strdup_x
   ...
   fun:ldap_int_initialize
   fun:ldap_set_option
   fun:*configure_tls*
}
{
   LDAP_TLS_workaround9
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:PR_ErrorInstallTable
   ...
   ...
   ...
   ...
   ...
   ...  
   ...
   ...
   ...
   ...
   ...
   ...
   fun:ldap_int_tls_start
   fun:ldap_start_tls_s
}
