Skip to content

Commit cee7175

Browse files
dingweiqingsgrooverdan
authored andcommitted
MDEV-25343 add read secret size in file key plugin
1 parent 64d85c3 commit cee7175

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-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("the secret file has incorrect length");
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 1 /the secret file has incorrect length/ 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 too large secret does not crash the server.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
secretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecret
2+
secretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecret
3+
secretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecret
4+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
--loose-file-key-management-filekey=FILE:$MTR_SUITE_DIR/t/filekeys-data-too-long.key
2+
--loose-file-key-management-filename=$MTR_SUITE_DIR/t/filekeys-data.enc
3+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
let SEARCH_PATTERN=the secret file has incorrect length;
2+
source filekeys_badtest.inc;
3+
4+
--echo # Test checks if opening an too large secret does not crash the server.

plugin/file_key_management/parser.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,24 @@ bool Parser::read_filekey(const char *filekey, char *secret)
174174
return 1;
175175
}
176176

177-
int len= read(f, secret, MAX_SECRET_SIZE);
177+
int len= read(f, secret, MAX_SECRET_SIZE + 1);
178178
if (len <= 0)
179179
{
180180
my_error(EE_READ,ME_ERROR_LOG, filekey, errno);
181181
close(f);
182182
return 1;
183183
}
184+
185+
if (len > MAX_SECRET_SIZE)
186+
{
187+
my_printf_error(EE_READ,
188+
"Cannot decrypt %s, the secret file has incorrect length, "
189+
"max secret size is %dB ",
190+
ME_ERROR_LOG, filekey, MAX_SECRET_SIZE);
191+
close(f);
192+
return 1;
193+
}
194+
184195
close(f);
185196
while (secret[len - 1] == '\r' || secret[len - 1] == '\n') len--;
186197
secret[len]= '\0';

0 commit comments

Comments
 (0)