mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-11939: innochecksum mistakes a file for an encrypted one (page 0 invalid)
Always read full page 0 to determine does tablespace contain encryption metadata. Tablespaces that are page compressed or page compressed and encrypted do not compare checksum as it does not exists. For encrypted tables use checksum verification written for encrypted tables and normal tables use normal method. buf_page_is_checksum_valid_crc32 buf_page_is_checksum_valid_innodb buf_page_is_checksum_valid_none Modify Innochecksum logging to file to avoid compilation warnings. fil0crypt.cc fil0crypt.h Modify to be able to use in innochecksum compilation and move fil_space_verify_crypt_checksum to end of the file. Add innochecksum logging to file. univ.i Add innochecksum strict_verify, log_file and cur_page_num variables as extern. page_zip_verify_checksum Add innochecksum logging to file and remove unnecessary code. innochecksum.cc Lot of changes most notable able to read encryption metadata from page 0 of the tablespace. Added test case where we corrupt intentionally FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION (encryption key version) FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum) FIL_DATA+10 (data)
This commit is contained in:
@ -31,6 +31,7 @@ allow-mismatches 0
|
||||
write crc32
|
||||
page-type-summary FALSE
|
||||
page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt
|
||||
per-page-details FALSE
|
||||
log (No default value)
|
||||
leaf FALSE
|
||||
merge 0
|
||||
@ -41,7 +42,7 @@ innochecksum Ver #.#.#
|
||||
Copyright (c) YEAR, YEAR , Oracle, MariaDB Corporation Ab and others.
|
||||
|
||||
InnoDB offline file checksum utility.
|
||||
Usage: innochecksum [-c] [-s <start page>] [-e <end page>] [-p <page>] [-v] [-a <allow mismatches>] [-n] [-C <strict-check>] [-w <write>] [-S] [-D <page type dump>] [-l <log>] [-e] <filename or [-]>
|
||||
Usage: innochecksum [-c] [-s <start page>] [-e <end page>] [-p <page>] [-i] [-v] [-a <allow mismatches>] [-n] [-C <strict-check>] [-w <write>] [-S] [-D <page type dump>] [-l <log>] [-l] [-m <merge pages>] <filename or [-]>
|
||||
-?, --help Displays this help and exits.
|
||||
-I, --info Synonym for --help.
|
||||
-V, --version Displays version information and exits.
|
||||
@ -62,8 +63,10 @@ Usage: innochecksum [-c] [-s <start page>] [-e <end page>] [-p <page>] [-v] [-a
|
||||
Display a count of each page type in a tablespace.
|
||||
-D, --page-type-dump=name
|
||||
Dump the page type info for each page in a tablespace.
|
||||
-i, --per-page-details
|
||||
Print out per-page detail information.
|
||||
-l, --log=name log output.
|
||||
-e, --leaf Examine leaf index pages
|
||||
-f, --leaf Examine leaf index pages
|
||||
-m, --merge=# leaf page count if merge given number of consecutive
|
||||
pages
|
||||
|
||||
@ -81,6 +84,7 @@ allow-mismatches 0
|
||||
write crc32
|
||||
page-type-summary FALSE
|
||||
page-type-dump (No default value)
|
||||
per-page-details FALSE
|
||||
log (No default value)
|
||||
leaf FALSE
|
||||
merge 0
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Set the environmental variables
|
||||
call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts");
|
||||
call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to.*");
|
||||
[1]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server.
|
||||
CREATE TABLE tab1 (pk INTEGER NOT NULL PRIMARY KEY,
|
||||
linestring_key GEOMETRY NOT NULL,
|
||||
@ -105,6 +106,7 @@ File::tab#.ibd
|
||||
# Page compressed page
|
||||
# Page compressed encrypted page
|
||||
# Other type of page
|
||||
|
||||
===============================================
|
||||
Additional information:
|
||||
Undo page type: # insert, # update, # other
|
||||
@ -139,6 +141,7 @@ File::tab#.ibd
|
||||
# Page compressed page
|
||||
# Page compressed encrypted page
|
||||
# Other type of page
|
||||
|
||||
===============================================
|
||||
Additional information:
|
||||
Undo page type: # insert, # update, # other
|
||||
@ -160,14 +163,14 @@ Filename::tab#.ibd
|
||||
==============================================================================
|
||||
PAGE_NO | PAGE_TYPE | EXTRA INFO
|
||||
==============================================================================
|
||||
#:: # | File Space Header | -
|
||||
#:: # | Insert Buffer Bitmap | -
|
||||
#:: # | Inode page | -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Freshly allocated page | -
|
||||
#::# | File Space Header | -
|
||||
#::# | Insert Buffer Bitmap | -
|
||||
#::# | Inode page | -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Freshly allocated page | -
|
||||
# Variables used by page type dump for ibdata1
|
||||
|
||||
Variables (--variable-name=value)
|
||||
@ -184,6 +187,7 @@ allow-mismatches 0
|
||||
write crc32
|
||||
page-type-summary FALSE
|
||||
page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt
|
||||
per-page-details FALSE
|
||||
log (No default value)
|
||||
leaf FALSE
|
||||
merge 0
|
||||
@ -194,14 +198,14 @@ Filename::tab#.ibd
|
||||
==============================================================================
|
||||
PAGE_NO | PAGE_TYPE | EXTRA INFO
|
||||
==============================================================================
|
||||
#:: # | File Space Header | -
|
||||
#:: # | Insert Buffer Bitmap | -
|
||||
#:: # | Inode page | -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Index page | index id=#, page level=# leaf #, No. of records=#, garbage=#, n_recs=#, -
|
||||
#:: # | Freshly allocated page | -
|
||||
#::# | File Space Header | -
|
||||
#::# | Insert Buffer Bitmap | -
|
||||
#::# | Inode page | -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, -
|
||||
#::# | Freshly allocated page | -
|
||||
[6]: check the valid lower bound values for option
|
||||
# allow-mismatches,page,start-page,end-page
|
||||
[9]: check the both short and long options "page" and "start-page" when
|
||||
|
Reference in New Issue
Block a user