summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-12-18 10:01:15 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2018-12-18 10:01:15 +0200
commit003217094001662a33e404c17759598fc4c07505 (patch)
tree2b87c1286825b5b5751bf2c0b33fae0b15bc0b52
parented13a0d221256028299df4167280e97860ba2edc (diff)
parent84f119f25c6464b791ae7b494d6dadf0c5974477 (diff)
downloadmariadb-git-003217094001662a33e404c17759598fc4c07505.tar.gz
Merge 10.1 into 10.2
-rw-r--r--storage/innobase/fil/fil0crypt.cc50
-rw-r--r--storage/xtradb/fil/fil0crypt.cc33
2 files changed, 42 insertions, 41 deletions
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index 72dacab59a5..c0c9cc01872 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -2552,15 +2552,19 @@ fil_space_verify_crypt_checksum(const byte* page, const page_size_t& page_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 (page_size.is_compressed()) {
return checksum == page_zip_calc_checksum(
page, page_size.physical(),
- SRV_CHECKSUM_ALGORITHM_CRC32);
+ SRV_CHECKSUM_ALGORITHM_CRC32)
+#ifdef INNODB_BUG_ENDIAN_CRC32
+ || checksum == page_zip_calc_checksum(
+ page, page_size.physical(),
+ SRV_CHECKSUM_ALGORITHM_CRC32, true)
+#endif
+ ;
}
return checksum == buf_calc_page_crc32(page)
@@ -2568,33 +2572,35 @@ fil_space_verify_crypt_checksum(const byte* page, const page_size_t& page_size)
|| checksum == buf_calc_page_crc32(page, true)
#endif
;
- case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
- if (page_size.is_compressed()) {
- return checksum == page_zip_calc_checksum(
- page, page_size.physical(),
- 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 (page_size.is_compressed()) {
- if (checksum == page_zip_calc_checksum(
- page, page_size.physical(), algorithm)) {
- return true;
- }
-
- algorithm = algorithm == SRV_CHECKSUM_ALGORITHM_INNODB
- ? SRV_CHECKSUM_ALGORITHM_CRC32
- : SRV_CHECKSUM_ALGORITHM_INNODB;
+ if (zip_size) {
return checksum == page_zip_calc_checksum(
- page, page_size.physical(), algorithm);
+ page, page_size.physical(),
+ SRV_CHECKSUM_ALGORITHM_CRC32)
+#ifdef INNODB_BUG_ENDIAN_CRC32
+ || checksum == page_zip_calc_checksum(
+ page, page_size.physical(),
+ SRV_CHECKSUM_ALGORITHM_CRC32, true)
+#endif
+ || checksum == page_zip_calc_checksum(
+ page, page_size.physical(),
+ 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 71269cf5e7b..96b8c5c7df4 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)