aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/kdb/db2/libdb2
diff options
context:
space:
mode:
authorTom Yu <tlyu@mit.edu>2016-08-25 18:02:56 -0400
committerTom Yu <tlyu@mit.edu>2016-08-29 15:46:29 -0400
commit56d02135d4c77b6aa0cb7136477d426248c60a6f (patch)
tree9ddd3fb8319e7e5a48673f7a49eccd0b0f39bcfc /src/plugins/kdb/db2/libdb2
parentaf3e7a4ac8b49ae8047ae2be7070d32feb69217d (diff)
downloadkrb5-56d02135d4c77b6aa0cb7136477d426248c60a6f.zip
krb5-56d02135d4c77b6aa0cb7136477d426248c60a6f.tar.gz
krb5-56d02135d4c77b6aa0cb7136477d426248c60a6f.tar.bz2
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. ticket: 8483 (new) target_version: 1.14-next target_version: 1.13-next tags: pullup
Diffstat (limited to 'src/plugins/kdb/db2/libdb2')
-rw-r--r--src/plugins/kdb/db2/libdb2/mpool/mpool.c8
-rw-r--r--src/plugins/kdb/db2/libdb2/test/run.test1
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 79ad613..e1de679 100644
--- a/src/plugins/kdb/db2/libdb2/mpool/mpool.c
+++ b/src/plugins/kdb/db2/libdb2/mpool/mpool.c
@@ -432,6 +432,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 caf6989..728a70f 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