summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-05-04 15:50:21 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2018-05-04 15:57:06 +0300
commitd257c425f2cc8bcc3f042bad51aefba5c2e76fed (patch)
tree1fcabe16383292f0d010820ad5594b9223c6140d
parentda3c5c3c9ad53eda04293e5f5ee6795197c70652 (diff)
downloadmariadb-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.
-rw-r--r--storage/innobase/log/log0log.cc7
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;