From 9dedfd473dc59e0277004e5b917e4eced02c8af5 Mon Sep 17 00:00:00 2001 From: Ken Sumrall Date: Tue, 9 Oct 2012 14:16:59 -0700 Subject: [PATCH] Fix encryption on certain devices There is a race in the encryption code that after it accepts the decryption password, it tells init to kill all the processes in class "main", then it mounts the decrypted filesystem, preps it, and restarts the framework. For an unknown reason on some devices, the new framework sometimes starts up before init has killed and reaped all the old processes. The proper fix is to make the killing of the old framework synchronous, so vold waits till all the processes have died. But with factory rom a few days away, the much more pragmatic solution of adding a sleep of 1 second after telling init to kill the old framework will suffice. Bug: 7271212 Change-Id: Ie971cd04abbc6f3f6500b4acd79d3b3b26d9561c --- cryptfs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cryptfs.c b/cryptfs.c index 87ab281..67533a4 100644 --- a/cryptfs.c +++ b/cryptfs.c @@ -688,6 +688,9 @@ int cryptfs_restart(void) property_set("vold.decrypt", "trigger_reset_main"); SLOGD("Just asked init to shut down class main\n"); + /* Give everything a chance to shutdown */ + sleep(1); + /* Now that the framework is shutdown, we should be able to umount() * the tmpfs filesystem, and mount the real one. */