From e6cf2c21a1cd6fc46b6adcaadc865e2f8bd4874e Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Thu, 21 Feb 2013 10:38:46 -0800 Subject: [PATCH] mount-encrypted: issue sync()s between umount stages In an effort to reduce the chances of a kernel bug wrecking filesystems during encrypted-stateful shutdown, add explicit sync() calls during shutdown. BUG=chrome-os-partner:17610 TEST=link build, shutdown with simulated panic in LOOP_CLR_FD results in successful journal replays BRANCH=None Change-Id: I4be981ebd0270d275ae81a79e3195bc72b70d984 Signed-off-by: Kees Cook Reviewed-on: https://gerrit.chromium.org/gerrit/43736 Reviewed-by: Grant Grundler --- utility/mount-encrypted.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/utility/mount-encrypted.c b/utility/mount-encrypted.c index 98e63e744a..9dbedc2a41 100644 --- a/utility/mount-encrypted.c +++ b/utility/mount-encrypted.c @@ -1063,6 +1063,12 @@ static int shutdown(void) } } + /* + * Force syncs to make sure we don't tickle racey/buggy kernel + * routines that might be causing crosbug.com/p/17610. + */ + sync(); + /* Optionally run fsck on the device after umount. */ if (getenv("MOUNT_ENCRYPTED_FSCK")) { char *cmd; @@ -1081,12 +1087,15 @@ static int shutdown(void) INFO("Removing %s.", dmcrypt_dev); if (!dm_teardown(dmcrypt_dev)) ERROR("dm_teardown(%s)", dmcrypt_dev); + sync(); INFO("Unlooping %s (named %s).", block_path, dmcrypt_name); if (!loop_detach_name(dmcrypt_name)) { ERROR("loop_detach_name(%s)", dmcrypt_name); return EXIT_FAILURE; } + sync(); + return EXIT_SUCCESS; }