mariadb/storage/innobase/include
Jan Lindström ddf2fac733 MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes
compatibility problems

Pages that are encrypted contain post encryption checksum on
different location that normal checksum fields. Therefore,
we should before decryption check this checksum to avoid
unencrypting corrupted pages. After decryption we can use
traditional checksum check to detect if page is corrupted
or unencryption was done using incorrect key.

Pages that are page compressed do not contain any checksum,
here we need to fist unencrypt, decompress and finally
use tradional checksum check to detect page corruption
or that we used incorrect key in unencryption.

buf0buf.cc: buf_page_is_corrupted() mofified so that
compressed pages are skipped.

buf0buf.h, buf_block_init(), buf_page_init_low():
removed unnecessary page_encrypted, page_compressed,
stored_checksum, valculated_checksum fields from
buf_page_t

buf_page_get_gen(): use new buf_page_check_corrupt() function
to detect corrupted pages.

buf_page_check_corrupt(): If page was not yet decrypted
check if post encryption checksum still matches.
If page is not anymore encrypted, use buf_page_is_corrupted()
traditional checksum method.

If page is detected as corrupted and it is not encrypted
we print corruption message to error log.
If page is still encrypted or it was encrypted and now
corrupted, we will print message that page is
encrypted to error log.

buf_page_io_complete(): use new buf_page_check_corrupt()
function to detect corrupted pages.

buf_page_decrypt_after_read(): Verify post encryption
checksum before tring to decrypt.

fil0crypt.cc: fil_encrypt_buf() verify post encryption
checksum and ind fil_space_decrypt() return true
if we really decrypted the page.

fil_space_verify_crypt_checksum(): rewrite to use
the method used when calculating post encryption
checksum. We also check if post encryption checksum
matches that traditional checksum check does not
match.

fil0fil.ic: Add missed page type encrypted and page
compressed to fil_get_page_type_name()

Note that this change does not yet fix innochecksum tool,
that will be done in separate MDEV.

Fix test failures caused by buf page corruption injection.
2017-02-06 15:40:16 +02:00
..
api0api.h 5.6.31 2016-06-21 14:21:03 +02:00
api0misc.h move to storage/innobase 2015-05-04 19:17:21 +02:00
btr0btr.h MDEV-10886: encryption.innodb-bad-key-change fails (crashes) in buildbot 2016-09-27 07:54:27 +03:00
btr0btr.ic MDEV-10886: encryption.innodb-bad-key-change fails (crashes) in buildbot 2016-09-27 07:54:27 +03:00
btr0cur.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
btr0cur.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
btr0defragment.h MDEV-8769: Server crash at file btr0btr.ic line 122 when defragmenting encrypted table using incorrect keys 2015-09-14 12:15:27 +03:00
btr0pcur.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
btr0pcur.ic MDEV-8588: Assertion failure in file ha_innodb.cc line 21140 if at least one encrypted table exists and encryption service is not available 2015-09-04 20:19:45 +03:00
btr0scrub.h Push for testing of encryption 2015-02-10 10:21:17 +01:00
btr0sea.h 5.6.31 2016-06-21 14:21:03 +02:00
btr0sea.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
btr0types.h 5.6.31 2016-06-21 14:21:03 +02:00
buf0buddy.h 5.6.31 2016-06-21 14:21:03 +02:00
buf0buddy.ic 5.6.31 2016-06-21 14:21:03 +02:00
buf0buf.h MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes 2017-02-06 15:40:16 +02:00
buf0buf.ic Output more information when assertion 2016-06-28 17:27:47 +03:00
buf0checksum.h move to storage/innobase 2015-05-04 19:17:21 +02:00
buf0dblwr.h move to storage/innobase 2015-05-04 19:17:21 +02:00
buf0dump.h move to storage/innobase 2015-05-04 19:17:21 +02:00
buf0flu.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
buf0flu.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
buf0lru.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
buf0lru.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
buf0mtflu.h Moved mt-flush code to buf0mtflu.[cc|h] and cleaned it up. This is for 2014-02-06 17:25:26 +02:00
buf0rea.h MDEV-8588: Assertion failure in file ha_innodb.cc line 21140 if at least one encrypted table exists and encryption service is not available 2015-09-04 20:19:45 +03:00
buf0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
data0data.h 5.6.31 2016-06-21 14:21:03 +02:00
data0data.ic 5.6.31 2016-06-21 14:21:03 +02:00
data0type.h move to storage/innobase 2015-05-04 19:17:21 +02:00
data0type.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
data0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
db0err.h MDEV-8764: Wrong error when encrypted table can't be decrypted. 2015-09-14 08:27:36 +03:00
dict0boot.h 5.6.31 2016-06-21 14:21:03 +02:00
dict0boot.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0crea.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
dict0crea.ic 5.6.31 2016-06-21 14:21:03 +02:00
dict0dict.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
dict0dict.ic MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
dict0load.h 5.6.31 2016-06-21 14:21:03 +02:00
dict0load.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0mem.h MDEV-11349 (1/2) Fix some clang 4.0 warnings 2016-11-25 09:09:51 +02:00
dict0mem.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0pagecompress.h MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
dict0pagecompress.ic MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
dict0priv.h move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0priv.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0stats.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
dict0stats.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0stats_bg.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
dict0stats_bg.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
dict0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
dyn0dyn.h 5.6.31 2016-06-21 14:21:03 +02:00
dyn0dyn.ic 5.6.31 2016-06-21 14:21:03 +02:00
eval0eval.h move to storage/innobase 2015-05-04 19:17:21 +02:00
eval0eval.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
eval0proc.h move to storage/innobase 2015-05-04 19:17:21 +02:00
eval0proc.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
fil0crypt.h MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes 2017-02-06 15:40:16 +02:00
fil0crypt.ic Add encryption key id to the API as a distinct concept 2015-04-09 19:35:40 +02:00
fil0fil.h MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fil0fil.ic MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes 2017-02-06 15:40:16 +02:00
fil0pagecompress.h MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fsp0fsp.h MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fsp0fsp.ic MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fsp0pagecompress.h MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fsp0pagecompress.ic MDEV-11623 MariaDB 10.1 fails to start datadir created with 2017-01-15 19:05:50 +02:00
fsp0types.h MDEV-9040: 10.1.8 fails after upgrade from 10.0.21 2015-11-05 10:30:48 +02:00
fts0ast.h MDEV-9282 Debian: the Lintian complains about "shlib-calls-exit" in ha_innodb.so 2016-12-28 15:54:24 +02:00
fts0blex.h move to storage/innobase 2015-05-04 19:17:21 +02:00
fts0fts.h MDEV-11233 CREATE FULLTEXT INDEX with a token longer than 127 bytes 2016-12-05 15:25:59 +02:00
fts0opt.h move to storage/innobase 2015-05-04 19:17:21 +02:00
fts0pars.h move to storage/innobase 2015-05-04 19:17:21 +02:00
fts0priv.h 5.6.31 2016-06-21 14:21:03 +02:00
fts0priv.ic 5.6.31 2016-06-21 14:21:03 +02:00
fts0tlex.h move to storage/innobase 2015-05-04 19:17:21 +02:00
fts0types.h 5.6.30 2016-04-26 19:05:10 +02:00
fts0types.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
fts0vlc.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
fut0fut.h move to storage/innobase 2015-05-04 19:17:21 +02:00
fut0fut.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
fut0lst.h Part 1 of MDEV-8139 Fix scrubbing tests 2017-01-04 18:21:42 +02:00
fut0lst.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ha0ha.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ha0ha.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ha0storage.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ha0storage.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ha_prototypes.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
handler0alter.h 5.6.31 2016-06-21 14:21:03 +02:00
hash0hash.h move to storage/innobase 2015-05-04 19:17:21 +02:00
hash0hash.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ibuf0ibuf.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
ibuf0ibuf.ic 5.6.27 2015-10-09 17:21:46 +02:00
ibuf0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
lock0iter.h move to storage/innobase 2015-05-04 19:17:21 +02:00
lock0lock.h A few fixes for VATS in 10.1 2016-10-25 18:57:03 -04:00
lock0lock.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
lock0priv.h Merge branch 'merge-innodb-5.6' into 10.0 2016-06-21 14:58:19 +02:00
lock0priv.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
lock0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
log0crypt.h MDEV-9793: getting mysqld crypto key from key version failed 2016-03-30 16:09:47 +03:00
log0log.h MDEV-11638 Encryption causes race conditions in InnoDB shutdown 2017-01-05 00:20:06 +02:00
log0log.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
log0recv.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
log0recv.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
mach0data.h 5.6.31 2016-06-21 14:21:03 +02:00
mach0data.ic MDEV-11349 (2/2) Fix some bogus-looking Valgrind warnings 2016-11-25 12:34:02 +02:00
mem0dbg.h move to storage/innobase 2015-05-04 19:17:21 +02:00
mem0dbg.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
mem0mem.h 5.6.31 2016-06-21 14:21:03 +02:00
mem0mem.ic 5.6.31 2016-06-21 14:21:03 +02:00
mem0pool.h move to storage/innobase 2015-05-04 19:17:21 +02:00
mem0pool.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
mtr0log.h move to storage/innobase 2015-05-04 19:17:21 +02:00
mtr0log.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
mtr0mtr.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
mtr0mtr.ic Merge branch 'merge-innodb-5.6' into 10.0 2016-06-21 14:58:19 +02:00
mtr0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
os0file.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
os0file.ic MDEV-8901: InnoDB: Punch hole is incorrecty done also to log files causing assertion and database corruption 2015-10-06 15:40:26 +03:00
os0once.h move to storage/innobase 2015-05-04 19:17:21 +02:00
os0proc.h move to storage/innobase 2015-05-04 19:17:21 +02:00
os0proc.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
os0sync.h MDEV-10341: InnoDB: Failing assertion: mutex_own(mutex) - mutex_exit_func 2016-08-23 21:24:36 +03:00
os0sync.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
os0thread.h 5.6.35 2017-01-07 14:24:42 +02:00
os0thread.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
page0cur.h 5.6.31 2016-06-21 14:21:03 +02:00
page0cur.ic MDEV-8588: Assertion failure in file ha_innodb.cc line 21140 if at least one encrypted table exists and encryption service is not available 2015-09-04 20:19:45 +03:00
page0page.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
page0page.ic MDEV-9931: InnoDB reads first page of every .ibd file at startup 2016-09-22 16:38:24 +03:00
page0types.h Merge branch 'merge-innodb-5.6' into 10.0 2016-06-21 14:58:19 +02:00
page0zip.h Merge branch 'merge-innodb-5.6' into 10.0 2016-06-21 14:58:19 +02:00
page0zip.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0grm.h move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0opt.h move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0opt.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0pars.h 5.6.31 2016-06-21 14:21:03 +02:00
pars0pars.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0sym.h move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0sym.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
pars0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
que0que.h move to storage/innobase 2015-05-04 19:17:21 +02:00
que0que.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
que0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
read0read.h 5.6.31 2016-06-21 14:21:03 +02:00
read0read.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
read0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
rem0cmp.h 5.6.31 2016-06-21 14:21:03 +02:00
rem0cmp.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
rem0rec.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
rem0rec.ic 5.6.31 2016-06-21 14:21:03 +02:00
rem0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
row0ext.h move to storage/innobase 2015-05-04 19:17:21 +02:00
row0ext.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0ftsort.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
row0import.h 5.6.31 2016-06-21 14:21:03 +02:00
row0import.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0ins.h 5.6.31 2016-06-21 14:21:03 +02:00
row0ins.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0log.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
row0log.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0merge.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
row0mysql.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
row0mysql.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0purge.h 5.6.31 2016-06-21 14:21:03 +02:00
row0purge.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0quiesce.h 5.6.31 2016-06-21 14:21:03 +02:00
row0quiesce.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0row.h 5.6.31 2016-06-21 14:21:03 +02:00
row0row.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0sel.h 5.6.31 2016-06-21 14:21:03 +02:00
row0sel.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
row0uins.h 5.6.31 2016-06-21 14:21:03 +02:00
row0uins.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0umod.h 5.6.31 2016-06-21 14:21:03 +02:00
row0umod.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0undo.h move to storage/innobase 2015-05-04 19:17:21 +02:00
row0undo.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0upd.h 5.6.31 2016-06-21 14:21:03 +02:00
row0upd.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
row0vers.h 5.6.31 2016-06-21 14:21:03 +02:00
row0vers.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
srv0conc.h move to storage/innobase 2015-05-04 19:17:21 +02:00
srv0mon.h MDEV-9931: InnoDB reads first page of every .ibd file at startup 2016-09-22 16:38:24 +03:00
srv0mon.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
srv0srv.h Merge branch '10.0' into 10.1 2017-01-16 03:18:14 +02:00
srv0srv.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
srv0start.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
sync0arr.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
sync0arr.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
sync0rw.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
sync0rw.ic Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
sync0sync.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
sync0sync.ic Merge branch '10.0' into 10.1 2016-08-25 12:40:09 +02:00
sync0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0i_s.h move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0purge.h move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0purge.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0rec.h 5.6.31 2016-06-21 14:21:03 +02:00
trx0rec.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0roll.h 5.6.31 2016-06-21 14:21:03 +02:00
trx0roll.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0rseg.h move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0rseg.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0sys.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
trx0sys.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0trx.h MDEV-11236 Failing assertion: state == TRX_STATE_NOT_STARTED 2016-12-02 16:25:47 +02:00
trx0trx.ic MDEV-11236 Failing assertion: state == TRX_STATE_NOT_STARTED 2016-12-02 16:25:47 +02:00
trx0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0undo.h Merge branch 'merge-innodb-5.6' into 10.0 2016-06-21 14:58:19 +02:00
trx0undo.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
trx0xa.h move to storage/innobase 2015-05-04 19:17:21 +02:00
univ.i Merge branch '10.0' into 10.1 2017-01-16 03:18:14 +02:00
usr0sess.h move to storage/innobase 2015-05-04 19:17:21 +02:00
usr0sess.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
usr0types.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0bh.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0bh.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0byte.h 5.6.31 2016-06-21 14:21:03 +02:00
ut0byte.ic Remove some unnecessary parentheses 2016-05-26 10:33:17 +00:00
ut0counter.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0crc32.h Use POWER8 accelerated crc32 2015-12-15 15:11:17 +11:00
ut0dbg.h 5.6.31 2016-06-21 14:21:03 +02:00
ut0list.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0list.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0lst.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0mem.h 5.6.31 2016-06-21 14:21:03 +02:00
ut0mem.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0rbt.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0rnd.h 5.6.31 2016-06-21 14:21:03 +02:00
ut0rnd.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0sort.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0timer.h MDEV-5834: Merge Kakao Defragmentation implementation to MariaDB 10.1 2014-08-06 15:28:58 +03:00
ut0timer.ic MDEV-5834: Merge Kakao Defragmentation implementation to MariaDB 10.1 2014-08-06 15:28:58 +03:00
ut0ut.h Merge branch '10.0' into 10.1 2016-06-28 22:01:55 +02:00
ut0ut.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0vec.h move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0vec.ic move to storage/innobase 2015-05-04 19:17:21 +02:00
ut0wqueue.h move to storage/innobase 2015-05-04 19:17:21 +02:00