1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-30924 Server crashes in MYSQL_LOG::is_open upon ALTER vs FUNCTION

ASAN showed use-after-free in binlog_online_alter_end_trans, during
running through thd->online_alter_cache_list.

In online_alter_binlog_get_cache_data, new_cache_data was allocated on
thd->mem_root, in case of autocommit=1, but this mem_root could be freed
in sp_head::execute, upon using stored functions.

It appears that thd->transaction->mem_root exists even in single-stmt
transaction mode (i.e autocommit=1), so it can be used in all cases.
This mem_root will remain valid till the end of transaction, including
commit phase.
This commit is contained in:
Nikita Malyavin
2023-03-26 17:50:37 +03:00
committed by Sergei Golubchik
parent 6b35d6a909
commit 3ad0e7edd1
3 changed files with 51 additions and 2 deletions

View File

@ -1370,6 +1370,34 @@ set debug_sync= 'now signal goon';
--reap
drop table t;
--echo #
--echo # MDEV-30924 Server crashes in MYSQL_LOG::is_open upon ALTER vs FUNCTION
--echo #
create table t (a int);
insert into t values (1),(2);
--delimiter $
create function f () returns int
begin
update t set a = 10;
return 0;
end $
--delimiter ;
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goon';
send alter table t force, algorithm=copy;
--connection con1
set debug_sync= 'now wait_for downgraded';
select f();
set debug_sync= 'now signal goon';
--connection default
--reap
drop table t;
drop function f;
--disconnect con1
--echo #
--echo # End of 11.2 tests
--echo #