diff options
author | Tom Yu <tlyu@mit.edu> | 2016-08-25 18:02:56 -0400 |
---|---|---|
committer | Tom Yu <tlyu@mit.edu> | 2016-08-29 15:46:29 -0400 |
commit | 56d02135d4c77b6aa0cb7136477d426248c60a6f (patch) | |
tree | 9ddd3fb8319e7e5a48673f7a49eccd0b0f39bcfc /src/plugins/kdb/db2/libdb2 | |
parent | af3e7a4ac8b49ae8047ae2be7070d32feb69217d (diff) | |
download | krb5-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.c | 8 | ||||
-rw-r--r-- | 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 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 |