krb5 commit [krb5-1.13]: Avoid byte-swap cache corruption in libdb2
Tom Yu
tlyu at mit.edu
Fri Sep 9 14:48:24 EDT 2016
https://github.com/krb5/krb5/commit/bf8ccad8f2fd6d1ea90d1bd16de117f800ce3730
commit bf8ccad8f2fd6d1ea90d1bd16de117f800ce3730
Author: Tom Yu <tlyu at mit.edu>
Date: Thu Aug 25 18:02:56 2016 -0400
Avoid byte-swap cache corruption in libdb2
Apply a patch from NetBSD to restore the cached copy of a page to the
machine byte order after a write operation swapped it to the file byte
order. As a regression test, modify test13 to sync the database file
after each put to exercise this bug.
(cherry picked from commit 56d02135d4c77b6aa0cb7136477d426248c60a6f)
ticket: 8483
version_fixed: 1.13.7
src/plugins/kdb/db2/libdb2/mpool/mpool.c | 8 ++++++++
src/plugins/kdb/db2/libdb2/test/run.test | 1 +
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/src/plugins/kdb/db2/libdb2/mpool/mpool.c b/src/plugins/kdb/db2/libdb2/mpool/mpool.c
index 7941a9f..81ecccc 100644
--- a/src/plugins/kdb/db2/libdb2/mpool/mpool.c
+++ b/src/plugins/kdb/db2/libdb2/mpool/mpool.c
@@ -431,6 +431,14 @@ mpool_write(mp, bp)
if (write(mp->fd, bp->page, mp->pagesize) != mp->pagesize)
return (RET_ERROR);
+ /*
+ * Re-run through the input filter since this page may soon be
+ * accessed via the cache, and whatever the user's output filter
+ * did may screw things up if we don't let the input filter
+ * restore the in-core copy.
+ */
+ if (mp->pgin)
+ (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
bp->flags &= ~MPOOL_DIRTY;
return (RET_SUCCESS);
}
diff --git a/src/plugins/kdb/db2/libdb2/test/run.test b/src/plugins/kdb/db2/libdb2/test/run.test
index 729ca1f..b907105 100644
--- a/src/plugins/kdb/db2/libdb2/test/run.test
+++ b/src/plugins/kdb/db2/libdb2/test/run.test
@@ -614,6 +614,7 @@ test13()
echo p
echo k$i
echo d$i
+ echo S
echo g
echo k$i
done > $TMP2
More information about the cvs-krb5
mailing list