Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-38761

Memory leak in get_quick_select upon DELETE ... NOT IN, 4440 bytes leaked

    XMLWordPrintable

Details

    Description

      CREATE TABLE t (c INT KEY) PARTITION BY KEY() PARTITIONS 3;
      ALTER TABLE t RENAME t2;
      SET @@max_statement_time=0.1;
      CREATE TABLE t (c INT KEY) ENGINE=InnoDB;
      DELETE FROM t WHERE c NOT IN (SELECT * FROM t2 WHERE c<>10) AND c<20;
      SHUTDOWN;
      

      Leads to:

      CS 12.3.0 549628d9ccb822252b55210d922cef3d13eecd71 (Optimized, UBASAN, Clang 21.1.3-20250923) Build 02/02/2026

      ==4168659==ERROR: LeakSanitizer: detected memory leaks
       
      Direct leak of 352 byte(s) in 1 object(s) allocated from:
          #0 0x5b7873704831 in operator new(unsigned long) (/test/UBASAN_MD020226-mariadb-12.3.0-linux-x86_64-opt/bin/mariadbd+0x3082831) (BuildId: 5881185709f4000abf9059c6976d3cff5f82b7f1)
          #1 0x5b7873f7d62d in get_quick_select(PARAM*, unsigned int, SEL_ARG*, unsigned int, unsigned int, st_mem_root*) /test/12.3_opt_san/sql/opt_range.cc:12701:11
          #2 0x5b7873ff0724 in TRP_RANGE::make_quick(PARAM*, bool, st_mem_root*) /test/12.3_opt_san/sql/opt_range.cc:2316:17
          #3 0x5b7873f3f2a6 in SQL_SELECT::test_quick_select(THD*, Bitmap<64u>, unsigned long long, unsigned long long, bool, bool, bool, bool, Item_func::Bitmap) /test/12.3_opt_san/sql/opt_range.cc:3205:34
          #4 0x5b78745aceab in SQL_SELECT::check_quick(THD*, bool, unsigned long long, Item_func::Bitmap) /test/12.3_opt_san/sql/opt_range.h:1945:12
          #5 0x5b78745aceab in Sql_cmd_delete::delete_from_single_table(THD*) /test/12.3_opt_san/sql/sql_delete.cc:625:26
          #6 0x5b78745c6dfd in Sql_cmd_delete::execute_inner(THD*) /test/12.3_opt_san/sql/sql_delete.cc:2174:28
          #7 0x5b7874a8572f in Sql_cmd_dml::execute(THD*) /test/12.3_opt_san/sql/sql_select.cc:34843:9
          #8 0x5b78747697fd in mysql_execute_command(THD*, bool) /test/12.3_opt_san/sql/sql_parse.cc:4422:27
          #9 0x5b787474c825 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /test/12.3_opt_san/sql/sql_parse.cc:7945:18
          #10 0x5b787474496c in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /test/12.3_opt_san/sql/sql_parse.cc:1896:7
          #11 0x5b787474e780 in do_command(THD*, bool) /test/12.3_opt_san/sql/sql_parse.cc:1432:17
          #12 0x5b7874f8d56c in do_handle_one_connection(CONNECT*, bool) /test/12.3_opt_san/sql/sql_connect.cc:1503:11
          #13 0x5b7874f8d086 in handle_one_connection /test/12.3_opt_san/sql/sql_connect.cc:1415:5
          #14 0x5b78736bdf2a in asan_thread_start(void*) crtstuff.c
       
      Indirect leak of 4088 byte(s) in 1 object(s) allocated from:
          #0 0x5b78736c06a8 in malloc (/test/UBASAN_MD020226-mariadb-12.3.0-linux-x86_64-opt/bin/mariadbd+0x303e6a8) (BuildId: 5881185709f4000abf9059c6976d3cff5f82b7f1)
          #1 0x5b7876750e15 in my_malloc /test/12.3_opt_san/mysys/my_malloc.c:93:29
          #2 0x5b787671f6ea in alloc_root /test/12.3_opt_san/mysys/my_alloc.c:336:29
          #3 0x5b7873f2df10 in QUICK_RANGE* Query_arena::alloc<QUICK_RANGE>(unsigned long) const /test/12.3_opt_san/sql/sql_class.h:1343:16
          #4 0x5b7873f2df10 in QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD*, TABLE*, unsigned int, bool, st_mem_root*, bool*) /test/12.3_opt_san/sql/opt_range.cc:1309:3
          #5 0x5b7873f7d709 in get_quick_select(PARAM*, unsigned int, SEL_ARG*, unsigned int, unsigned int, st_mem_root*) /test/12.3_opt_san/sql/opt_range.cc:12701:15
          #6 0x5b7873ff0724 in TRP_RANGE::make_quick(PARAM*, bool, st_mem_root*) /test/12.3_opt_san/sql/opt_range.cc:2316:17
          #7 0x5b7873f3f2a6 in SQL_SELECT::test_quick_select(THD*, Bitmap<64u>, unsigned long long, unsigned long long, bool, bool, bool, bool, Item_func::Bitmap) /test/12.3_opt_san/sql/opt_range.cc:3205:34
          #8 0x5b78745aceab in SQL_SELECT::check_quick(THD*, bool, unsigned long long, Item_func::Bitmap) /test/12.3_opt_san/sql/opt_range.h:1945:12
          #9 0x5b78745aceab in Sql_cmd_delete::delete_from_single_table(THD*) /test/12.3_opt_san/sql/sql_delete.cc:625:26
          #10 0x5b78745c6dfd in Sql_cmd_delete::execute_inner(THD*) /test/12.3_opt_san/sql/sql_delete.cc:2174:28
          #11 0x5b7874a8572f in Sql_cmd_dml::execute(THD*) /test/12.3_opt_san/sql/sql_select.cc:34843:9
          #12 0x5b78747697fd in mysql_execute_command(THD*, bool) /test/12.3_opt_san/sql/sql_parse.cc:4422:27
          #13 0x5b787474c825 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /test/12.3_opt_san/sql/sql_parse.cc:7945:18
          #14 0x5b787474496c in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /test/12.3_opt_san/sql/sql_parse.cc:1896:7
          #15 0x5b787474e780 in do_command(THD*, bool) /test/12.3_opt_san/sql/sql_parse.cc:1432:17
          #16 0x5b7874f8d56c in do_handle_one_connection(CONNECT*, bool) /test/12.3_opt_san/sql/sql_connect.cc:1503:11
          #17 0x5b7874f8d086 in handle_one_connection /test/12.3_opt_san/sql/sql_connect.cc:1415:5
          #18 0x5b78736bdf2a in asan_thread_start(void*) crtstuff.c
       
      SUMMARY: AddressSanitizer: 4440 byte(s) leaked in 2 allocation(s).
      

      Setup:

      Compiled with a recent version of Clang and LLVM. Ubuntu instructions for Clang/LLVM 18:
        # Note: It is strongly recommended to uninstall all old Clang & LLVM packages (ref  dpkg --list | grep -iE 'clang|llvm'  and use  apt purge  and  dpkg --purge  to remove the packages), before installing Clang/LLVM 18
           sudo apt install clang llvm-18 llvm-18-linker-tools llvm-18-runtime llvm-18-tools llvm-18-dev libstdc++-14-dev llvm-dev lld-18
      Compiled with: "-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_C{,XX}_FLAGS='-march=native -mtune=native'" and:
          -DWITH_ASAN=ON -DWITH_ASAN_SCOPE=ON -DWITH_UBSAN=ON -DWSREP_LIB_WITH_ASAN=ON
      Set before execution:
          export UBSAN_OPTIONS=print_stacktrace=1:report_error_type=1   # And you may also want to supress UBSAN startup issues using 'suppressions=UBSAN.filter' in UBSAN_OPTIONS. For an example of UBSAN.filter, which includes current startup issues see: https://github.com/mariadb-corporation/mariadb-qa/blob/master/UBSAN.filter
          export ASAN_OPTIONS=quarantine_size_mb=512:atexit=0:detect_invalid_pointer_pairs=3:dump_instruction_bytes=1:abort_on_error=1:allocator_may_return_null=1
      

      SAN Bug Detection Matrix

          Rel    o/d  Build   Commit                                    UniqueID observed             
      CS  10.6   dbg  230126  cd02709a315c9f08965d6b8fb7e75baaae17a4f4  No bug found                  
      CS  10.6   opt  230126  cd02709a315c9f08965d6b8fb7e75baaae17a4f4  No bug found                  
      CS  10.11  dbg  230126  b061b5ab1f2cd2a6993e53dc24a865304ced14cd  No bug found                  
      CS  10.11  opt  230126  b061b5ab1f2cd2a6993e53dc24a865304ced14cd  No bug found                  
      CS  11.4   dbg  260126  b6d0e23d76fe5936b6a29379ab494852e4d493b1  No bug found                  
      CS  11.4   opt  260126  b6d0e23d76fe5936b6a29379ab494852e4d493b1  No bug found                  
      CS  11.8   dbg  230126  01ff5ae6b677bead4c41d91bf5afb25c593a1d02  No bug found                  
      CS  11.8   opt  230126  01ff5ae6b677bead4c41d91bf5afb25c593a1d02  LSAN|memory leak|sql/opt_range.cc|operator|get_quick_select|TRP_RANGE::make_quick|SQL_SELECT::test_quick_select
      CS  12.2   dbg  230126  6ca70dd64ce56da40fad3bcd0641493210dd0a4c  No bug found                  
      CS  12.2   opt  230126  6ca70dd64ce56da40fad3bcd0641493210dd0a4c  LSAN|memory leak|sql/opt_range.cc|operator|get_quick_select|TRP_RANGE::make_quick|SQL_SELECT::test_quick_select
      CS  12.3   dbg  020226  549628d9ccb822252b55210d922cef3d13eecd71  No bug found                  
      CS  12.3   opt  020226  549628d9ccb822252b55210d922cef3d13eecd71  LSAN|memory leak|sql/opt_range.cc|operator|get_quick_select|TRP_RANGE::make_quick|SQL_SELECT::test_quick_select
      ES  10.6   dbg  260126  0fe345fff3a0463224ca714831303d40fb83648b  No bug found                  
      ES  10.6   opt  230126  0fe345fff3a0463224ca714831303d40fb83648b  No bug found                  
      ES  11.4   dbg  260126  34f616d5fd2c649d0c79acb4e2423c90b8f10436  No bug found                  
      ES  11.4   opt  260126  34f616d5fd2c649d0c79acb4e2423c90b8f10436  No bug found                  
      ES  11.8   dbg  230126  405ee76b60c4ab82155f339136ed20d3b7363717  No bug found                  
      ES  11.8   opt  230126  405ee76b60c4ab82155f339136ed20d3b7363717  LSAN|memory leak|sql/opt_range.cc|operator|get_quick_select|TRP_RANGE::make_quick|SQL_SELECT::test_quick_select
      

      Note the observations are on release/optimized builds not debug builds. Non-sporadic though the 0.1 max stmt time may make it lightly so.

      Attachments

        Issue Links

          Activity

            People

              psergei Sergei Petrunia
              Roel Roel Van de Paar
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.