diff options
| author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-12-18 10:01:15 +0200 |
|---|---|---|
| committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-12-18 10:01:15 +0200 |
| commit | 003217094001662a33e404c17759598fc4c07505 (patch) | |
| tree | 2b87c1286825b5b5751bf2c0b33fae0b15bc0b52 | |
| parent | ed13a0d221256028299df4167280e97860ba2edc (diff) | |
| parent | 84f119f25c6464b791ae7b494d6dadf0c5974477 (diff) | |
| download | mariadb-git-003217094001662a33e404c17759598fc4c07505.tar.gz | |
Merge 10.1 into 10.2
| -rw-r--r-- | storage/innobase/fil/fil0crypt.cc | 50 | ||||
| -rw-r--r-- | storage/xtradb/fil/fil0crypt.cc | 33 |
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) |
