Commit 50c9469b authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-18105 Mariabackup fails to copy encrypted InnoDB system tablespace if LSN>4G

This is a regression caused by
commit 8c43f963
that was part of the MDEV-12112 fixes.

page_is_corrupted(): Never interpret page_no=0 as encrypted.
parent 68143c89
...@@ -306,9 +306,16 @@ static bool page_is_corrupted(byte *page, ulint page_no, xb_fil_cur_t *cursor, f ...@@ -306,9 +306,16 @@ static bool page_is_corrupted(byte *page, ulint page_no, xb_fil_cur_t *cursor, f
return false; return false;
} }
/* Validate encrypted pages. */ /* Validate encrypted pages. The first page is never encrypted.
if (mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION) && In the system tablespace, the first page would be written with
(space->crypt_data && space->crypt_data->type!= CRYPT_SCHEME_UNENCRYPTED)) { FIL_PAGE_FILE_FLUSH_LSN at shutdown, and if the LSN exceeds
4,294,967,295, the mach_read_from_4() below would wrongly
interpret the page as encrypted. We prevent that by checking
page_no first. */
if (page_no
&& mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION)
&& space->crypt_data
&& space->crypt_data->type != CRYPT_SCHEME_UNENCRYPTED) {
if (!fil_space_verify_crypt_checksum(page, cursor->zip_size)) if (!fil_space_verify_crypt_checksum(page, cursor->zip_size))
return true; return true;
......
--innodb-encrypt-log=ON --innodb-encrypt-log=ON
--innodb-tablespaces-encryption
--innodb-encrypt-tables=ON
--innodb-encryption-rotate-key-age=1
--innodb-encryption-threads=4
--plugin-load-add=$FILE_KEY_MANAGEMENT_SO --plugin-load-add=$FILE_KEY_MANAGEMENT_SO
--loose-file-key-management --loose-file-key-management
--loose-file-key-management-filekey=FILE:$MTR_SUITE_DIR/filekeys-data.key --loose-file-key-management-filekey=FILE:$MTR_SUITE_DIR/filekeys-data.key
......
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