mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-30453 Setting innodb_buffer_pool_filename to an empty string attempts to delete the data directory on shutdown
Let us make innodb_buffer_pool_filename a read-only variable so that a malicious user cannot cause an important file to be deleted on InnoDB shutdown. An attempt to delete a directory will fail because it is not a regular file, but what if the variable pointed to (say) ibdata1, ib_logfile0 or some *.ibd file? It does not seem to make much sense for this parameter to be configurable in the first place, but we will not change that in order to avoid breaking compatibility.
This commit is contained in:
@ -15,7 +15,6 @@ col2 VARCHAR(25), col3 varchar(25)) ENGINE=InnoDB;
|
||||
CREATE INDEX idx1 ON tab5(col2(10));
|
||||
CREATE INDEX idx2 ON tab5(col3(10));
|
||||
|
||||
SET GLOBAL innodb_buffer_pool_filename=ib_buffer_pool100;
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=100;
|
||||
|
||||
#***********************************************************
|
||||
@ -58,8 +57,7 @@ AND variable_value != @IBPDS
|
||||
AND variable_value like 'Buffer pool(s) dump completed at%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--file_exists $MYSQLD_DATADIR/ib_buffer_pool100
|
||||
SET GLOBAL innodb_buffer_pool_filename=ib_buffer_pool1;
|
||||
--move_file $MYSQLD_DATADIR/ib_buffer_pool $MYSQLD_DATADIR/ib_buffer_pool100
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=1;
|
||||
SELECT @@global.innodb_buffer_pool_dump_pct;
|
||||
|
||||
@ -83,17 +81,15 @@ AND variable_value != @IBPDS
|
||||
AND variable_value like 'Buffer pool(s) dump completed at%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--file_exists $MYSQLD_DATADIR/ib_buffer_pool1
|
||||
--file_exists $MYSQLD_DATADIR/ib_buffer_pool
|
||||
|
||||
perl;
|
||||
my $size1 = -s "$ENV{MYSQLD_DATADIR}/ib_buffer_pool1";
|
||||
my $size1 = -s "$ENV{MYSQLD_DATADIR}/ib_buffer_pool";
|
||||
my $size100 = -s "$ENV{MYSQLD_DATADIR}/ib_buffer_pool100";
|
||||
die "$size100<=$size1\n" unless $size100 > $size1;
|
||||
EOF
|
||||
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=DEFAULT;
|
||||
SET GLOBAL innodb_buffer_pool_filename=DEFAULT;
|
||||
|
||||
--remove_file $MYSQLD_DATADIR/ib_buffer_pool100
|
||||
--remove_file $MYSQLD_DATADIR/ib_buffer_pool1
|
||||
DROP TABLE tab5;
|
||||
|
Reference in New Issue
Block a user