diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-05-04 15:50:21 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-05-04 15:57:06 +0300 |
commit | d257c425f2cc8bcc3f042bad51aefba5c2e76fed (patch) | |
tree | 1fcabe16383292f0d010820ad5594b9223c6140d /storage | |
parent | da3c5c3c9ad53eda04293e5f5ee6795197c70652 (diff) | |
download | mariadb-git-d257c425f2cc8bcc3f042bad51aefba5c2e76fed.tar.gz |
MDEV-15764 InnoDB may write uninitialized garbage to redo log
log_sys_init(), log_buffer_extend(): Add TRASH_ALLOC() instrumentation
log_write_up_to(): Correctly calculate the byte offset.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/log/log0log.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 5eb7054be72..47c4f2584aa 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -235,6 +235,8 @@ log_buffer_extend( log_sys->buf_ptr = static_cast<byte*>( ut_zalloc_nokey(log_sys->buf_size * 2 + OS_FILE_LOG_BLOCK_SIZE)); + TRASH_ALLOC(log_sys->buf_ptr, + log_sys->buf_size * 2 + OS_FILE_LOG_BLOCK_SIZE); log_sys->buf = static_cast<byte*>( ut_align(log_sys->buf_ptr, OS_FILE_LOG_BLOCK_SIZE)); @@ -726,6 +728,8 @@ log_sys_init() log_sys->buf_ptr = static_cast<byte*>( ut_zalloc_nokey(log_sys->buf_size * 2 + OS_FILE_LOG_BLOCK_SIZE)); + TRASH_ALLOC(log_sys->buf_ptr, + log_sys->buf_size * 2 + OS_FILE_LOG_BLOCK_SIZE); log_sys->buf = static_cast<byte*>( ut_align(log_sys->buf_ptr, OS_FILE_LOG_BLOCK_SIZE)); @@ -1243,7 +1247,8 @@ loop: log_mutex_exit(); /* Erase the end of the last log block. */ - memset(write_buf + end_offset, 0, ~end_offset & OS_FILE_LOG_BLOCK_SIZE); + memset(write_buf + end_offset, 0, + ~end_offset & (OS_FILE_LOG_BLOCK_SIZE - 1)); /* Calculate pad_size if needed. */ pad_size = 0; |