summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--storage/innobase/fil/fil0crypt.cc33
-rw-r--r--storage/xtradb/fil/fil0crypt.cc33
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)