MDEV-18279 MLOG_FILE_WRITE_CRYPT_DATA fails to set the crypt_data->type for tablespace.

Problem:
========
MLOG_FILE_WRITE_CRYPT_DATA redo log fails to apply type for
the crypt_data present in the space. While processing the double-write
buffer pages, page fails to decrypt. It leads to warning message.

Fix:
====
Set the type while parsing MLOG_FILE_WRITE_CRYPT_DATA redo log.
If type and length is of invalid type then mark it as corrupted.
parent a84be48e
...@@ -529,10 +529,12 @@ fil_parse_write_crypt_data( ...@@ -529,10 +529,12 @@ fil_parse_write_crypt_data(
uint len = mach_read_from_1(ptr); uint len = mach_read_from_1(ptr);
ptr += 1; ptr += 1;
ut_a(type == CRYPT_SCHEME_UNENCRYPTED || if ((type != CRYPT_SCHEME_1 && type != CRYPT_SCHEME_UNENCRYPTED)
type == CRYPT_SCHEME_1); // only supported || len != CRYPT_SCHEME_1_IV_LEN) {
*err = DB_CORRUPTION;
return NULL;
}
ut_a(len == CRYPT_SCHEME_1_IV_LEN); // only supported
uint min_key_version = mach_read_from_4(ptr); uint min_key_version = mach_read_from_4(ptr);
ptr += 4; ptr += 4;
...@@ -551,6 +553,7 @@ fil_parse_write_crypt_data( ...@@ -551,6 +553,7 @@ fil_parse_write_crypt_data(
crypt_data->page0_offset = offset; crypt_data->page0_offset = offset;
crypt_data->min_key_version = min_key_version; crypt_data->min_key_version = min_key_version;
crypt_data->encryption = encryption; crypt_data->encryption = encryption;
crypt_data->type = type;
memcpy(crypt_data->iv, ptr, len); memcpy(crypt_data->iv, ptr, len);
ptr += len; ptr += len;
......
...@@ -529,10 +529,12 @@ fil_parse_write_crypt_data( ...@@ -529,10 +529,12 @@ fil_parse_write_crypt_data(
uint len = mach_read_from_1(ptr); uint len = mach_read_from_1(ptr);
ptr += 1; ptr += 1;
ut_a(type == CRYPT_SCHEME_UNENCRYPTED || if ((type != CRYPT_SCHEME_1 && type != CRYPT_SCHEME_UNENCRYPTED)
type == CRYPT_SCHEME_1); // only supported || len != CRYPT_SCHEME_1_IV_LEN) {
*err = DB_CORRUPTION;
return NULL;
}
ut_a(len == CRYPT_SCHEME_1_IV_LEN); // only supported
uint min_key_version = mach_read_from_4(ptr); uint min_key_version = mach_read_from_4(ptr);
ptr += 4; ptr += 4;
...@@ -551,6 +553,7 @@ fil_parse_write_crypt_data( ...@@ -551,6 +553,7 @@ fil_parse_write_crypt_data(
crypt_data->page0_offset = offset; crypt_data->page0_offset = offset;
crypt_data->min_key_version = min_key_version; crypt_data->min_key_version = min_key_version;
crypt_data->encryption = encryption; crypt_data->encryption = encryption;
crypt_data->type = type;
memcpy(crypt_data->iv, ptr, len); memcpy(crypt_data->iv, ptr, len);
ptr += len; ptr += len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment