Skip to content

Commit 16ddd18

Browse files
committed
MDEV-9613: keyfile without any keys crashes mysqld on loading file_key_management plugin
Code was assuming that the keys file would contain at least one valid key. This caused a Dynamic_array::at(0) call that lead to the crash.
1 parent 8e04857 commit 16ddd18

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
call mtr.add_suppression("System key id 1 is missing at");
2+
call mtr.add_suppression("Plugin 'file_key_management' init function returned error");
3+
call mtr.add_suppression("Plugin 'file_key_management' registration.*failed");
4+
FOUND /System key id 1 is missing at/ in mysqld.1.err
5+
create table t1(c1 bigint not null, b char(200)) engine=innodb encrypted=yes encryption_key_id=1;
6+
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
7+
select plugin_status from information_schema.plugins
8+
where plugin_name = 'file_key_management';
9+
plugin_status
10+
# Test checks if opening an empty filekeys does not crash the server.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--loose-file-key-management-filename=$MYSQL_TEST_DIR/std_data/empty_file
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
let SEARCH_PATTERN=System key id 1 is missing at;
2+
source filekeys_badtest.inc;
3+
4+
--echo # Test checks if opening an empty filekeys does not crash the server.

plugin/file_key_management/parser.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ bool Parser::parse_file(Dynamic_array<keyentry> *keys, const char *secret)
220220
keys->sort(sort_keys);
221221
my_free(buffer);
222222

223-
if (keys->at(0).id != 1)
223+
if (keys->elements() == 0 || keys->at(0).id != 1)
224224
{
225225
report_error("System key id 1 is missing", 0);
226226
return 1;

0 commit comments

Comments
 (0)