diff --git a/cryptfs.c b/cryptfs.c index 1bf7049..2f8381c 100644 --- a/cryptfs.c +++ b/cryptfs.c @@ -35,15 +35,14 @@ #include #include #include -#include #include #include #include #include "cryptfs.h" #define LOG_TAG "Cryptfs" -#include "cutils/android_reboot.h" #include "cutils/log.h" #include "cutils/properties.h" +#include "cutils/android_reboot.h" #include "hardware_legacy/power.h" #include "VolumeManager.h" @@ -70,6 +69,19 @@ static struct crypt_persist_data *persist_data = NULL; extern struct fstab *fstab; +static void cryptfs_reboot(int recovery) +{ + if (recovery) { + property_set(ANDROID_RB_PROPERTY, "reboot,recovery"); + } else { + property_set(ANDROID_RB_PROPERTY, "reboot"); + } + sleep(20); + + /* Shouldn't get here, reboot should happen before sleep times out */ + return; +} + static void ioctl_init(struct dm_ioctl *io, size_t dataSize, const char *name, unsigned flags) { memset(io, 0, dataSize); @@ -1697,7 +1709,7 @@ int cryptfs_enable(char *howarg, char *passwd) put_crypt_ftr_and_key(&crypt_ftr); sleep(2); /* Give the UI a chance to show 100% progress */ - android_reboot(ANDROID_RB_RESTART, 0, 0); + cryptfs_reboot(0); } else { char value[PROPERTY_VALUE_MAX]; @@ -1713,7 +1725,7 @@ int cryptfs_enable(char *howarg, char *passwd) } else { SLOGE("could not open /cache/recovery/command\n"); } - android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); + cryptfs_reboot(1); } else { /* set property to trigger dialog */ property_set("vold.encrypt_progress", "error_partially_encrypted"); @@ -1744,7 +1756,7 @@ error_shutting_down: * vold to restart the system. */ SLOGE("Error enabling encryption after framework is shutdown, no data changed, restarting system"); - android_reboot(ANDROID_RB_RESTART, 0, 0); + cryptfs_reboot(0); /* shouldn't get here */ property_set("vold.encrypt_progress", "error_shutting_down");