Bug #89645 memory leak in Sys_var_gtid_purged::do_check
Submitted: 13 Feb 2018 10:18 Modified: 20 Mar 2018 17:46
Reporter: Tor Didriksen Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S3 (Non-critical)
Version:8.0.6 OS:Any
Assigned to: CPU Architecture:Any

[13 Feb 2018 10:18] Tor Didriksen
Description:
String::c_ptr_safe() isn't (safe that is)

40 bytes in 1 blocks are definitely lost in loss record 5 of 6
   at 0x6EAFB6B: malloc (vg_replace_malloc.c:299)
   by 0x3A2BCAF: my_raw_malloc(unsigned long, int) (my_malloc.cc:199)
   by 0x3A2B907: my_malloc(unsigned int, unsigned long, int) (my_malloc.cc:81)
   by 0x28F32B0: String::mem_realloc(unsigned long, bool) (sql_string.cc:117)
   by 0x26667D0: String::c_ptr_safe() (sql_string.h:261)
   by 0x28915A8: Sys_var_gtid_purged::do_check(THD*, set_var*) (sys_vars.h:2220)
   by 0x26B4B53: sys_var::check(THD*, set_var*) (set_var.cc:302)
   by 0x26B6972: set_var::check(THD*) (set_var.cc:929)
   by 0x26B60D4: sql_set_variables(THD*, List<set_var_base>*, bool) (set_var.cc:765)
   by 0x2687500: Persisted_variables_cache::set_persist_options(bool) (persisted_variable.cc:700)
   by 0x2629248: mysqld_main(int, char**) (mysqld.cc:6178)
   by 0x2619696: main (main.cc:30)

1 bytes in 1 blocks are still reachable in loss record 1 of 9
   at 0x6EAFB6B: malloc (vg_replace_malloc.c:299)
   by 0x6293554: tls_get_addr_tail (in /usr/lib64/ld-2.26.so)
   by 0x6299AF7: __tls_get_addr (in /usr/lib64/ld-2.26.so)
   by 0x25A638DF: semi_sync_master_plugin_init(void*) (semisync_master_plugin.cc:502)
   by 0x27AC350: plugin_initialize(st_plugin_int*) (sql_plugin.cc:1210)
   by 0x27AC93D: plugin_init_initialize_and_reap() (sql_plugin.cc:1350)
   by 0x27AD385: plugin_register_dynamic_and_init_all(int*, char**, int) (sql_plugin.cc:1577)
   by 0x2624F51: init_server_components() (mysqld.cc:4965)
   by 0x262818D: mysqld_main(int, char**) (mysqld.cc:5810)
   by 0x2619696: main (main.cc:30)

How to repeat:
./mtr --mem --valgrind binlog_nogtid.binlog_persist_only_variables

ASAN also reports a leak.

Suggested fix:
Don't use c_ptr_safe, use c_ptr()
[20 Mar 2018 17:46] Paul DuBois
Posted by developer:
 
Fixed in 8.0.11.

gtid_purged handling had a memory leak.