diff options
-rw-r--r-- | storage/innobase/fil/fil0crypt.cc | 33 | ||||
-rw-r--r-- | storage/xtradb/fil/fil0crypt.cc | 33 |
2 files changed, 28 insertions, 38 deletions
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index aeaa420aa4d..03cfa8d9fbc 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -2588,10 +2588,8 @@ bool fil_space_verify_crypt_checksum(const byte* page, ulint zip_size) /* If stored checksum matches one of the calculated checksums page is not corrupted. */ - srv_checksum_algorithm_t algorithm = srv_checksum_algorithm_t( - srv_checksum_algorithm); - switch (algorithm) { + switch (srv_checksum_algorithm_t(srv_checksum_algorithm)) { case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: if (zip_size) { return checksum == page_zip_calc_checksum( @@ -2599,32 +2597,29 @@ bool fil_space_verify_crypt_checksum(const byte* page, ulint zip_size) } return checksum == buf_calc_page_crc32(page); - case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: - if (zip_size) { - return checksum == page_zip_calc_checksum( - page, zip_size, SRV_CHECKSUM_ALGORITHM_INNODB); - } - return checksum == buf_calc_page_new_checksum(page); case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: - return checksum == BUF_NO_CHECKSUM_MAGIC; + /* Starting with MariaDB 10.1.25, 10.2.7, 10.3.1, + due to MDEV-12114, fil_crypt_calculate_checksum() + is only using CRC32 for the encrypted pages. + Due to this, we must treat "strict_none" as "none". */ case SRV_CHECKSUM_ALGORITHM_NONE: return true; + case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: + /* Starting with MariaDB 10.1.25, 10.2.7, 10.3.1, + due to MDEV-12114, fil_crypt_calculate_checksum() + is only using CRC32 for the encrypted pages. + Due to this, we must treat "strict_innodb" as "innodb". */ case SRV_CHECKSUM_ALGORITHM_INNODB: case SRV_CHECKSUM_ALGORITHM_CRC32: if (checksum == BUF_NO_CHECKSUM_MAGIC) { return true; } if (zip_size) { - if (checksum == page_zip_calc_checksum( - page, zip_size, algorithm)) { - return true; - } - - algorithm = algorithm == SRV_CHECKSUM_ALGORITHM_INNODB - ? SRV_CHECKSUM_ALGORITHM_CRC32 - : SRV_CHECKSUM_ALGORITHM_INNODB; return checksum == page_zip_calc_checksum( - page, zip_size, algorithm); + page, zip_size, SRV_CHECKSUM_ALGORITHM_CRC32) + || checksum == page_zip_calc_checksum( + page, zip_size, + SRV_CHECKSUM_ALGORITHM_INNODB); } return checksum == buf_calc_page_crc32(page) diff --git a/storage/xtradb/fil/fil0crypt.cc b/storage/xtradb/fil/fil0crypt.cc index aeaa420aa4d..03cfa8d9fbc 100644 --- a/storage/xtradb/fil/fil0crypt.cc +++ b/storage/xtradb/fil/fil0crypt.cc @@ -2588,10 +2588,8 @@ bool fil_space_verify_crypt_checksum(const byte* page, ulint zip_size) /* If stored checksum matches one of the calculated checksums page is not corrupted. */ - srv_checksum_algorithm_t algorithm = srv_checksum_algorithm_t( - srv_checksum_algorithm); - switch (algorithm) { + switch (srv_checksum_algorithm_t(srv_checksum_algorithm)) { case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: if (zip_size) { return checksum == page_zip_calc_checksum( @@ -2599,32 +2597,29 @@ bool fil_space_verify_crypt_checksum(const byte* page, ulint zip_size) } return checksum == buf_calc_page_crc32(page); - case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: - if (zip_size) { - return checksum == page_zip_calc_checksum( - page, zip_size, SRV_CHECKSUM_ALGORITHM_INNODB); - } - return checksum == buf_calc_page_new_checksum(page); case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: - return checksum == BUF_NO_CHECKSUM_MAGIC; + /* Starting with MariaDB 10.1.25, 10.2.7, 10.3.1, + due to MDEV-12114, fil_crypt_calculate_checksum() + is only using CRC32 for the encrypted pages. + Due to this, we must treat "strict_none" as "none". */ case SRV_CHECKSUM_ALGORITHM_NONE: return true; + case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: + /* Starting with MariaDB 10.1.25, 10.2.7, 10.3.1, + due to MDEV-12114, fil_crypt_calculate_checksum() + is only using CRC32 for the encrypted pages. + Due to this, we must treat "strict_innodb" as "innodb". */ case SRV_CHECKSUM_ALGORITHM_INNODB: case SRV_CHECKSUM_ALGORITHM_CRC32: if (checksum == BUF_NO_CHECKSUM_MAGIC) { return true; } if (zip_size) { - if (checksum == page_zip_calc_checksum( - page, zip_size, algorithm)) { - return true; - } - - algorithm = algorithm == SRV_CHECKSUM_ALGORITHM_INNODB - ? SRV_CHECKSUM_ALGORITHM_CRC32 - : SRV_CHECKSUM_ALGORITHM_INNODB; return checksum == page_zip_calc_checksum( - page, zip_size, algorithm); + page, zip_size, SRV_CHECKSUM_ALGORITHM_CRC32) + || checksum == page_zip_calc_checksum( + page, zip_size, + SRV_CHECKSUM_ALGORITHM_INNODB); } return checksum == buf_calc_page_crc32(page) |