[MDEV-21648] Corrupt output or AddressSanitizer: heap-use-after-free in Binary_string::copy or String::copy upon query with RPAD and ROLLUP Created: 2020-02-03  Updated: 2023-04-27

Status: Open
Project: MariaDB Server
Component/s: Data types, Server
Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6
Fix Version/s: 10.4, 10.5

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Oleksandr Byelkin
Resolution: Unresolved Votes: 0
Labels: None


 Description   

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (31),(32);
SELECT BINARY( RPAD( a, a, ' ' ) ) AS f FROM t1 GROUP BY f WITH ROLLUP;
 
# Cleanup
DROP TABLE t1;

10.4 ASAN b615d275

==2099==ERROR: AddressSanitizer: heap-use-after-free on address 0x60e00006b110 at pc 0x7ff9228e92a3 bp 0x7ff917a0fd20 sp 0x7ff917a0f4d0
READ of size 32 at 0x60e00006b110 thread T5
    #0 0x7ff9228e92a2 in memmove (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x622a2)
    #1 0x5621acd8d68e in Binary_string::copy(Binary_string const&) /data/src/10.4/sql/sql_string.cc:230
    #2 0x5621acaba5af in String::copy(String const&) /data/src/10.4/sql/sql_string.h:817
    #3 0x5621ad3691b4 in Item_copy_string::copy() /data/src/10.4/sql/item.cc:4839
    #4 0x5621accdff74 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.4/sql/sql_select.cc:25006
    #5 0x5621accc9c27 in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:21731
    #6 0x5621accc0892 in evaluate_join_record /data/src/10.4/sql/sql_select.cc:20558
    #7 0x5621accbfb12 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:20377
    #8 0x5621accbd898 in do_select /data/src/10.4/sql/sql_select.cc:19876
    #9 0x5621acc5679f in JOIN::exec_inner() /data/src/10.4/sql/sql_select.cc:4452
    #10 0x5621acc540ab in JOIN::exec() /data/src/10.4/sql/sql_select.cc:4234
    #11 0x5621acc57b5d in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.4/sql/sql_select.cc:4666
    #12 0x5621acc2d3a4 in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.4/sql/sql_select.cc:420
    #13 0x5621acbafa16 in execute_sqlcom_select /data/src/10.4/sql/sql_parse.cc:6360
    #14 0x5621acb9d822 in mysql_execute_command(THD*) /data/src/10.4/sql/sql_parse.cc:3899
    #15 0x5621acbb8035 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.4/sql/sql_parse.cc:7901
    #16 0x5621acb91350 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.4/sql/sql_parse.cc:1842
    #17 0x5621acb8e250 in do_command(THD*) /data/src/10.4/sql/sql_parse.cc:1360
    #18 0x5621acf15466 in do_handle_one_connection(CONNECT*) /data/src/10.4/sql/sql_connect.cc:1412
    #19 0x5621acf14e1a in handle_one_connection /data/src/10.4/sql/sql_connect.cc:1316
    #20 0x5621ae37e9c9 in pfs_spawn_thread /data/src/10.4/storage/perfschema/pfs.cc:1869
    #21 0x7ff9226714a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
    #22 0x7ff9207a5d0e in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xe8d0e)
 
0x60e00006b110 is located 112 bytes inside of 148-byte region [0x60e00006b0a0,0x60e00006b134)
freed by thread T5 here:
    #0 0x7ff922948a10 in free (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1a10)
    #1 0x5621ae4b1074 in free_memory /data/src/10.4/mysys/safemalloc.c:279
    #2 0x5621ae4b075d in sf_free /data/src/10.4/mysys/safemalloc.c:197
    #3 0x5621ae4828ef in my_free /data/src/10.4/mysys/my_malloc.c:222
    #4 0x5621ac9081a7 in Binary_string::free() /data/src/10.4/sql/sql_string.h:604
    #5 0x5621acd8c3c8 in Binary_string::real_alloc(unsigned long) /data/src/10.4/sql/sql_string.cc:43
    #6 0x5621ac925b3f in Binary_string::alloc(unsigned long) /data/src/10.4/sql/sql_string.h:613
    #7 0x5621acd8d5a4 in Binary_string::copy(Binary_string const&) /data/src/10.4/sql/sql_string.cc:227
    #8 0x5621acaba5af in String::copy(String const&) /data/src/10.4/sql/sql_string.h:817
    #9 0x5621ad3691b4 in Item_copy_string::copy() /data/src/10.4/sql/item.cc:4839
    #10 0x5621accdff74 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.4/sql/sql_select.cc:25006
    #11 0x5621accc9c27 in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:21731
    #12 0x5621accc0892 in evaluate_join_record /data/src/10.4/sql/sql_select.cc:20558
    #13 0x5621accbfb12 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:20377
    #14 0x5621accbd898 in do_select /data/src/10.4/sql/sql_select.cc:19876
    #15 0x5621acc5679f in JOIN::exec_inner() /data/src/10.4/sql/sql_select.cc:4452
    #16 0x5621acc540ab in JOIN::exec() /data/src/10.4/sql/sql_select.cc:4234
    #17 0x5621acc57b5d in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.4/sql/sql_select.cc:4666
    #18 0x5621acc2d3a4 in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.4/sql/sql_select.cc:420
    #19 0x5621acbafa16 in execute_sqlcom_select /data/src/10.4/sql/sql_parse.cc:6360
    #20 0x5621acb9d822 in mysql_execute_command(THD*) /data/src/10.4/sql/sql_parse.cc:3899
    #21 0x5621acbb8035 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.4/sql/sql_parse.cc:7901
    #22 0x5621acb91350 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.4/sql/sql_parse.cc:1842
    #23 0x5621acb8e250 in do_command(THD*) /data/src/10.4/sql/sql_parse.cc:1360
    #24 0x5621acf15466 in do_handle_one_connection(CONNECT*) /data/src/10.4/sql/sql_connect.cc:1412
    #25 0x5621acf14e1a in handle_one_connection /data/src/10.4/sql/sql_connect.cc:1316
    #26 0x5621ae37e9c9 in pfs_spawn_thread /data/src/10.4/storage/perfschema/pfs.cc:1869
    #27 0x7ff9226714a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
 
previously allocated by thread T5 here:
    #0 0x7ff922948d28 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1d28)
    #1 0x5621ae4b0175 in sf_malloc /data/src/10.4/mysys/safemalloc.c:118
    #2 0x5621ae481ffe in my_malloc /data/src/10.4/mysys/my_malloc.c:101
    #3 0x5621acd8c427 in Binary_string::real_alloc(unsigned long) /data/src/10.4/sql/sql_string.cc:44
    #4 0x5621ac925b3f in Binary_string::alloc(unsigned long) /data/src/10.4/sql/sql_string.h:613
    #5 0x5621acd8d5a4 in Binary_string::copy(Binary_string const&) /data/src/10.4/sql/sql_string.cc:227
    #6 0x5621acaba5af in String::copy(String const&) /data/src/10.4/sql/sql_string.h:817
    #7 0x5621ad3691b4 in Item_copy_string::copy() /data/src/10.4/sql/item.cc:4839
    #8 0x5621accdff74 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.4/sql/sql_select.cc:25006
    #9 0x5621accc9c27 in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:21731
    #10 0x5621accc0892 in evaluate_join_record /data/src/10.4/sql/sql_select.cc:20558
    #11 0x5621accbf4af in sub_select(JOIN*, st_join_table*, bool) /data/src/10.4/sql/sql_select.cc:20338
    #12 0x5621accbd898 in do_select /data/src/10.4/sql/sql_select.cc:19876
    #13 0x5621acc5679f in JOIN::exec_inner() /data/src/10.4/sql/sql_select.cc:4452
    #14 0x5621acc540ab in JOIN::exec() /data/src/10.4/sql/sql_select.cc:4234
    #15 0x5621acc57b5d in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.4/sql/sql_select.cc:4666
    #16 0x5621acc2d3a4 in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.4/sql/sql_select.cc:420
    #17 0x5621acbafa16 in execute_sqlcom_select /data/src/10.4/sql/sql_parse.cc:6360
    #18 0x5621acb9d822 in mysql_execute_command(THD*) /data/src/10.4/sql/sql_parse.cc:3899
    #19 0x5621acbb8035 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.4/sql/sql_parse.cc:7901
    #20 0x5621acb91350 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.4/sql/sql_parse.cc:1842
    #21 0x5621acb8e250 in do_command(THD*) /data/src/10.4/sql/sql_parse.cc:1360
    #22 0x5621acf15466 in do_handle_one_connection(CONNECT*) /data/src/10.4/sql/sql_connect.cc:1412
    #23 0x5621acf14e1a in handle_one_connection /data/src/10.4/sql/sql_connect.cc:1316
    #24 0x5621ae37e9c9 in pfs_spawn_thread /data/src/10.4/storage/perfschema/pfs.cc:1869
    #25 0x7ff9226714a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
 
Thread T5 created by T0 here:
    #0 0x7ff9228b7f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
    #1 0x5621ae37edb6 in spawn_thread_v1 /data/src/10.4/storage/perfschema/pfs.cc:1919
    #2 0x5621ac8e74f8 in inline_mysql_thread_create /data/src/10.4/include/mysql/psi/mysql_thread.h:1275
    #3 0x5621ac8fbaa1 in create_thread_to_handle_connection(CONNECT*) /data/src/10.4/sql/mysqld.cc:6234
    #4 0x5621ac8fc184 in create_new_thread(CONNECT*) /data/src/10.4/sql/mysqld.cc:6304
    #5 0x5621ac8fc50f in handle_accepted_socket(st_mysql_socket, st_mysql_socket) /data/src/10.4/sql/mysqld.cc:6402
    #6 0x5621ac8fd161 in handle_connections_sockets() /data/src/10.4/sql/mysqld.cc:6560
    #7 0x5621ac8fb322 in mysqld_main(int, char**) /data/src/10.4/sql/mysqld.cc:5892
    #8 0x5621ac8e53df in main /data/src/10.4/sql/main.cc:25
    #9 0x7ff9206dd2e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
 
SUMMARY: AddressSanitizer: heap-use-after-free (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x622a2) in memmove
Shadow bytes around the buggy address:
  0x0c1c800055d0: fa fa fa fa fa fa fa fa fa fa fa fa 00 00 00 00
  0x0c1c800055e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04
  0x0c1c800055f0: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c1c80005600: 00 00 00 00 00 00 00 00 00 00 00 04 fa fa fa fa
  0x0c1c80005610: fa fa fa fa fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c1c80005620: fd fd[fd]fd fd fd fd fa fa fa fa fa fa fa fa fa
  0x0c1c80005630: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c1c80005640: fd fd fd fa fa fa fa fa fa fa fa fa 00 00 00 00
  0x0c1c80005650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04
  0x0c1c80005660: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c1c80005670: 00 00 00 00 00 00 00 00 00 00 04 fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==2099==ABORTING

10.3 b0fa3080

==2255==ERROR: AddressSanitizer: heap-use-after-free on address 0x60e00006e050 at pc 0x7f2efb5042a3 bp 0x7f2eef439940 sp 0x7f2eef4390f0
READ of size 32 at 0x60e00006e050 thread T5
    #0 0x7f2efb5042a2 in memmove (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x622a2)
    #1 0x563e53e3a7c2 in String::copy(String const&) /data/src/10.3/sql/sql_string.cc:233
    #2 0x563e543ae85a in Item_copy_string::copy() /data/src/10.3/sql/item.cc:5169
    #3 0x563e53d90232 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.3/sql/sql_select.cc:24311
    #4 0x563e53d7a15d in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:21052
    #5 0x563e53d70992 in evaluate_join_record /data/src/10.3/sql/sql_select.cc:19888
    #6 0x563e53d6fbe7 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:19707
    #7 0x563e53d6d8b6 in do_select /data/src/10.3/sql/sql_select.cc:19208
    #8 0x563e53d08f42 in JOIN::exec_inner() /data/src/10.3/sql/sql_select.cc:4098
    #9 0x563e53d06b75 in JOIN::exec() /data/src/10.3/sql/sql_select.cc:3892
    #10 0x563e53d0a054 in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.3/sql/sql_select.cc:4297
    #11 0x563e53ce408b in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.3/sql/sql_select.cc:370
    #12 0x563e53c65e02 in execute_sqlcom_select /data/src/10.3/sql/sql_parse.cc:6294
    #13 0x563e53c5566f in mysql_execute_command(THD*) /data/src/10.3/sql/sql_parse.cc:3821
    #14 0x563e53c6ee3e in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.3/sql/sql_parse.cc:7818
    #15 0x563e53c49b92 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.3/sql/sql_parse.cc:1856
    #16 0x563e53c46a71 in do_command(THD*) /data/src/10.3/sql/sql_parse.cc:1401
    #17 0x563e53fbce94 in do_handle_one_connection(CONNECT*) /data/src/10.3/sql/sql_connect.cc:1403
    #18 0x563e53fbc85b in handle_one_connection /data/src/10.3/sql/sql_connect.cc:1308
    #19 0x563e5542a199 in pfs_spawn_thread /data/src/10.3/storage/perfschema/pfs.cc:1869
    #20 0x7f2efb28c4a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
    #21 0x7f2ef93c0d0e in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xe8d0e)
 
0x60e00006e050 is located 112 bytes inside of 148-byte region [0x60e00006dfe0,0x60e00006e074)
freed by thread T5 here:
    #0 0x7f2efb563a10 in free (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1a10)
    #1 0x563e5555ae40 in free_memory /data/src/10.3/mysys/safemalloc.c:279
    #2 0x563e5555a529 in sf_free /data/src/10.3/mysys/safemalloc.c:197
    #3 0x563e5552c6bb in my_free /data/src/10.3/mysys/my_malloc.c:223
    #4 0x563e539d695d in String::free() /data/src/10.3/sql/sql_string.h:347
    #5 0x563e53e39522 in String::real_alloc(unsigned long) /data/src/10.3/sql/sql_string.cc:43
    #6 0x563e539fa42b in String::alloc(unsigned long) /data/src/10.3/sql/sql_string.h:357
    #7 0x563e53e3a6d8 in String::copy(String const&) /data/src/10.3/sql/sql_string.cc:230
    #8 0x563e543ae85a in Item_copy_string::copy() /data/src/10.3/sql/item.cc:5169
    #9 0x563e53d90232 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.3/sql/sql_select.cc:24311
    #10 0x563e53d7a15d in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:21052
    #11 0x563e53d70992 in evaluate_join_record /data/src/10.3/sql/sql_select.cc:19888
    #12 0x563e53d6fbe7 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:19707
    #13 0x563e53d6d8b6 in do_select /data/src/10.3/sql/sql_select.cc:19208
    #14 0x563e53d08f42 in JOIN::exec_inner() /data/src/10.3/sql/sql_select.cc:4098
    #15 0x563e53d06b75 in JOIN::exec() /data/src/10.3/sql/sql_select.cc:3892
    #16 0x563e53d0a054 in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.3/sql/sql_select.cc:4297
    #17 0x563e53ce408b in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.3/sql/sql_select.cc:370
    #18 0x563e53c65e02 in execute_sqlcom_select /data/src/10.3/sql/sql_parse.cc:6294
    #19 0x563e53c5566f in mysql_execute_command(THD*) /data/src/10.3/sql/sql_parse.cc:3821
    #20 0x563e53c6ee3e in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.3/sql/sql_parse.cc:7818
    #21 0x563e53c49b92 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.3/sql/sql_parse.cc:1856
    #22 0x563e53c46a71 in do_command(THD*) /data/src/10.3/sql/sql_parse.cc:1401
    #23 0x563e53fbce94 in do_handle_one_connection(CONNECT*) /data/src/10.3/sql/sql_connect.cc:1403
    #24 0x563e53fbc85b in handle_one_connection /data/src/10.3/sql/sql_connect.cc:1308
    #25 0x563e5542a199 in pfs_spawn_thread /data/src/10.3/storage/perfschema/pfs.cc:1869
    #26 0x7f2efb28c4a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
 
previously allocated by thread T5 here:
    #0 0x7f2efb563d28 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1d28)
    #1 0x563e55559f41 in sf_malloc /data/src/10.3/mysys/safemalloc.c:118
    #2 0x563e5552bdca in my_malloc /data/src/10.3/mysys/my_malloc.c:101
    #3 0x563e53e39581 in String::real_alloc(unsigned long) /data/src/10.3/sql/sql_string.cc:44
    #4 0x563e539fa42b in String::alloc(unsigned long) /data/src/10.3/sql/sql_string.h:357
    #5 0x563e53e3a6d8 in String::copy(String const&) /data/src/10.3/sql/sql_string.cc:230
    #6 0x563e543ae85a in Item_copy_string::copy() /data/src/10.3/sql/item.cc:5169
    #7 0x563e53d90232 in copy_fields(TMP_TABLE_PARAM*) /data/src/10.3/sql/sql_select.cc:24311
    #8 0x563e53d7a15d in end_send_group(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:21052
    #9 0x563e53d70992 in evaluate_join_record /data/src/10.3/sql/sql_select.cc:19888
    #10 0x563e53d6f56c in sub_select(JOIN*, st_join_table*, bool) /data/src/10.3/sql/sql_select.cc:19668
    #11 0x563e53d6d8b6 in do_select /data/src/10.3/sql/sql_select.cc:19208
    #12 0x563e53d08f42 in JOIN::exec_inner() /data/src/10.3/sql/sql_select.cc:4098
    #13 0x563e53d06b75 in JOIN::exec() /data/src/10.3/sql/sql_select.cc:3892
    #14 0x563e53d0a054 in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.3/sql/sql_select.cc:4297
    #15 0x563e53ce408b in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.3/sql/sql_select.cc:370
    #16 0x563e53c65e02 in execute_sqlcom_select /data/src/10.3/sql/sql_parse.cc:6294
    #17 0x563e53c5566f in mysql_execute_command(THD*) /data/src/10.3/sql/sql_parse.cc:3821
    #18 0x563e53c6ee3e in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.3/sql/sql_parse.cc:7818
    #19 0x563e53c49b92 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.3/sql/sql_parse.cc:1856
    #20 0x563e53c46a71 in do_command(THD*) /data/src/10.3/sql/sql_parse.cc:1401
    #21 0x563e53fbce94 in do_handle_one_connection(CONNECT*) /data/src/10.3/sql/sql_connect.cc:1403
    #22 0x563e53fbc85b in handle_one_connection /data/src/10.3/sql/sql_connect.cc:1308
    #23 0x563e5542a199 in pfs_spawn_thread /data/src/10.3/storage/perfschema/pfs.cc:1869
    #24 0x7f2efb28c4a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
 
Thread T5 created by T0 here:
    #0 0x7f2efb4d2f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
    #1 0x563e5542a5d5 in spawn_thread_v1 /data/src/10.3/storage/perfschema/pfs.cc:1919
    #2 0x563e539b3e20 in inline_mysql_thread_create /data/src/10.3/include/mysql/psi/mysql_thread.h:1275
    #3 0x563e539c9131 in create_thread_to_handle_connection(CONNECT*) /data/src/10.3/sql/mysqld.cc:6600
    #4 0x563e539c9814 in create_new_thread /data/src/10.3/sql/mysqld.cc:6670
    #5 0x563e539ca82c in handle_connections_sockets() /data/src/10.3/sql/mysqld.cc:6945
    #6 0x563e539c8601 in mysqld_main(int, char**) /data/src/10.3/sql/mysqld.cc:6222
    #7 0x563e539b253f in main /data/src/10.3/sql/main.cc:25
    #8 0x7f2ef92f82e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
 
SUMMARY: AddressSanitizer: heap-use-after-free (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x622a2) in memmove
Shadow bytes around the buggy address:
  0x0c1c80005bb0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c1c80005bc0: fa fa fa fa 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c80005bd0: 00 00 00 00 00 00 00 04 fa fa fa fa fa fa fa fa
  0x0c1c80005be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c80005bf0: 00 00 00 04 fa fa fa fa fa fa fa fa fd fd fd fd
=>0x0c1c80005c00: fd fd fd fd fd fd fd fd fd fd[fd]fd fd fd fd fa
  0x0c1c80005c10: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x0c1c80005c20: fd fd fd fd fd fd fd fd fd fd fd fa fa fa fa fa
  0x0c1c80005c30: fa fa fa fa 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c80005c40: 00 00 00 00 00 00 00 04 fa fa fa fa fa fa fa fa
  0x0c1c80005c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==2255==ABORTING

Reproducible with at least MyISAM and InnoDB.
Reproducible on 10.1-10.5 (old versions have a slightly different stack trace, see above).

Non-ASAN builds don't crash for me, but can return corrupt result (possibly non-deterministically):

10.4 debug b615d275

SELECT BINARY( RPAD( a, a, ' ' ) ) AS f FROM t1 GROUP BY f WITH ROLLUP;
f
31                             
��������������������������������
NULL



 Comments   
Comment by Elena Stepanova [ 2021-02-18 ]

Different stack, apparently related problem. The same test as below, but without DISTINCT, produces the stack trace as in the description.

--source include/have_innodb.inc
--source include/have_sequence.inc
 
CREATE TABLE t1 (
  a VARCHAR(2079),
  b VARCHAR(3233) GENERATED ALWAYS AS (a) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=utf16;
 
INSERT INTO t1 (a) SELECT CONCAT('s',seq) FROM seq_1_to_500;
 
SELECT DISTINCT b FROM t1 GROUP BY IF(0, 'x', b) WITH ROLLUP;
 
# Cleanup
DROP TABLE t1;

10.2 5ecaf52d

==41848==ERROR: AddressSanitizer: unknown-crash on address 0x62e000029795 at pc 0x5649c15a51de bp 0x7ff130082f50 sp 0x7ff130082f40
READ of size 1 at 0x62e000029795 thread T27
    #0 0x5649c15a51dd in my_utf16_uni /data/src/10.2/strings/ctype-ucs2.c:1291
    #1 0x5649c15a63ea in my_charlen_utf16 /data/src/10.2/strings/ctype-ucs2.c:1452
    #2 0x5649c15a6487 in my_well_formed_char_length_utf16 /data/src/10.2/strings/ctype-mb.ic:187
    #3 0x5649c157efd5 in my_copy_fix_mb /data/src/10.2/strings/ctype-mb.c:406
    #4 0x5649c159d8a6 in my_copy_fix_mb2_or_mb4 /data/src/10.2/strings/ctype-ucs2.c:179
    #5 0x5649bfee962b in String_copier::well_formed_copy(charset_info_st const*, char*, unsigned int, charset_info_st const*, char const*, unsigned int, unsigned int) /data/src/10.2/sql/sql_string.cc:1085
    #6 0x5649bfc4fd67 in String_copier::well_formed_copy(charset_info_st const*, char*, unsigned int, charset_info_st const*, char const*, unsigned int) /data/src/10.2/sql/sql_string.h:123
    #7 0x5649c02e53b6 in Field_blob::store(char const*, unsigned int, charset_info_st const*) /data/src/10.2/sql/field.cc:8310
    #8 0x5649c038e435 in Item::save_in_field(Field*, bool) /data/src/10.2/sql/item.cc:6397
    #9 0x5649bfbed5d0 in Item_result_field::save_in_result_field(bool) /data/src/10.2/sql/item.h:2546
    #10 0x5649bfe385aa in copy_funcs(Item**, THD const*) /data/src/10.2/sql/sql_select.cc:23908
    #11 0x5649bfe21089 in end_write_group(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:20528
    #12 0x5649bfe4ec14 in AGGR_OP::put_record(bool) /data/src/10.2/sql/sql_select.cc:26804
    #13 0x5649bfe5cf92 in AGGR_OP::put_record() (/data/bld/10.2-asan-nightly/bin/mysqld+0xfb3f92)
    #14 0x5649bfe11c31 in sub_select_postjoin_aggr(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18580
    #15 0x5649bfe14352 in evaluate_join_record /data/src/10.2/sql/sql_select.cc:19079
    #16 0x5649bfe12cc4 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18859
    #17 0x5649bfe10dad in do_select /data/src/10.2/sql/sql_select.cc:18403
    #18 0x5649bfdaaf40 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3642
    #19 0x5649bfda8a57 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3437
    #20 0x5649bfdac25f in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /data/src/10.2/sql/sql_select.cc:3837
    #21 0x5649bfd88d01 in handle_select(THD*, LEX*, select_result*, unsigned long) /data/src/10.2/sql/sql_select.cc:361
    #22 0x5649bfcffbec in execute_sqlcom_select /data/src/10.2/sql/sql_parse.cc:6248
    #23 0x5649bfcecb91 in mysql_execute_command(THD*) /data/src/10.2/sql/sql_parse.cc:3559
    #24 0x5649bfd09169 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.2/sql/sql_parse.cc:7763
    #25 0x5649bfce21ae in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.2/sql/sql_parse.cc:1827
    #26 0x5649bfcdef6d in do_command(THD*) /data/src/10.2/sql/sql_parse.cc:1381
    #27 0x5649c0067924 in do_handle_one_connection(CONNECT*) /data/src/10.2/sql/sql_connect.cc:1336
    #28 0x5649c00671e7 in handle_one_connection /data/src/10.2/sql/sql_connect.cc:1241
    #29 0x5649c1403aab in pfs_spawn_thread /data/src/10.2/storage/perfschema/pfs.cc:1869
    #30 0x7ff146c24608 in start_thread /build/glibc-eX1tMB/glibc-2.31/nptl/pthread_create.c:477
    #31 0x7ff1467fe292 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x122292)
 
0x62e000029795 is located 21397 bytes inside of 42660-byte region [0x62e000024400,0x62e00002eaa4)
allocated by thread T27 here:
    #0 0x7ff14718bbc8 in malloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dbc8)
    #1 0x5649c1520606 in sf_malloc /data/src/10.2/mysys/safemalloc.c:118
    #2 0x5649c14ec56b in my_malloc /data/src/10.2/mysys/my_malloc.c:101
    #3 0x5649c14c9bdd in alloc_root /data/src/10.2/mysys/my_alloc.c:243
    #4 0x5649bffae1fc in open_table_from_share(THD*, TABLE_SHARE*, char const*, unsigned int, unsigned int, unsigned int, TABLE*, bool) /data/src/10.2/sql/table.cc:3136
    #5 0x5649bfbc3cfd in open_table(THD*, TABLE_LIST*, Open_table_context*) /data/src/10.2/sql/sql_base.cc:1934
    #6 0x5649bfbcbc82 in open_and_process_table /data/src/10.2/sql/sql_base.cc:3614
    #7 0x5649bfbce05c in open_tables(THD*, DDL_options_st const&, TABLE_LIST**, unsigned int*, unsigned int, Prelocking_strategy*) /data/src/10.2/sql/sql_base.cc:4081
    #8 0x5649bfbd1be2 in open_and_lock_tables(THD*, DDL_options_st const&, TABLE_LIST*, bool, unsigned int, Prelocking_strategy*) /data/src/10.2/sql/sql_base.cc:4880
    #9 0x5649bfb48db1 in open_and_lock_tables(THD*, TABLE_LIST*, bool, unsigned int) /data/src/10.2/sql/sql_base.h:507
    #10 0x5649bfcf1121 in mysql_execute_command(THD*) /data/src/10.2/sql/sql_parse.cc:4275
    #11 0x5649bfd09169 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.2/sql/sql_parse.cc:7763
    #12 0x5649bfce21ae in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.2/sql/sql_parse.cc:1827
    #13 0x5649bfcdef6d in do_command(THD*) /data/src/10.2/sql/sql_parse.cc:1381
    #14 0x5649c0067924 in do_handle_one_connection(CONNECT*) /data/src/10.2/sql/sql_connect.cc:1336
    #15 0x5649c00671e7 in handle_one_connection /data/src/10.2/sql/sql_connect.cc:1241
    #16 0x5649c1403aab in pfs_spawn_thread /data/src/10.2/storage/perfschema/pfs.cc:1869
    #17 0x7ff146c24608 in start_thread /build/glibc-eX1tMB/glibc-2.31/nptl/pthread_create.c:477
 
Thread T27 created by T0 here:
    #0 0x7ff1470b8805 in pthread_create (/lib/x86_64-linux-gnu/libasan.so.5+0x3a805)
    #1 0x5649c1403e9c in spawn_thread_v1 /data/src/10.2/storage/perfschema/pfs.cc:1919
    #2 0x5649bfa84083 in inline_mysql_thread_create /data/src/10.2/include/mysql/psi/mysql_thread.h:1246
    #3 0x5649bfa9bc54 in create_thread_to_handle_connection(CONNECT*) /data/src/10.2/sql/mysqld.cc:6573
    #4 0x5649bfa9c3ef in create_new_thread /data/src/10.2/sql/mysqld.cc:6643
    #5 0x5649bfa9d581 in handle_connections_sockets() /data/src/10.2/sql/mysqld.cc:6901
    #6 0x5649bfa9afa5 in mysqld_main(int, char**) /data/src/10.2/sql/mysqld.cc:6192
    #7 0x5649bfa8293c in main /data/src/10.2/sql/main.cc:25
    #8 0x7ff1467030b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
 
SUMMARY: AddressSanitizer: unknown-crash /data/src/10.2/strings/ctype-ucs2.c:1291 in my_utf16_uni
Shadow bytes around the buggy address:
  0x0c5c7fffd2a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd2b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd2c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd2d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd2e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c5c7fffd2f0: 00 00[05]00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c5c7fffd340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==41848==ABORTING

Non-ASAN builds produce corrupted output.

Higher versions require more complicated test cases, but has been observed on at least 10.2-10.4 (no information about 10.5-10.6).

Generated at Thu Feb 08 09:08:45 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.