Create convert_fbe breadcrumb file to support conversion to FBE
Change-Id: I38b29e1e34ea793e4b87cd27a1d39fa905fddf7a
This commit is contained in:
parent
8b5f9d74a0
commit
d0db337d72
3 changed files with 35 additions and 3 deletions
24
recovery.cpp
24
recovery.cpp
|
@ -76,7 +76,10 @@ static const char *INTENT_FILE = "/cache/recovery/intent";
|
|||
static const char *LOG_FILE = "/cache/recovery/log";
|
||||
static const char *LAST_INSTALL_FILE = "/cache/recovery/last_install";
|
||||
static const char *LOCALE_FILE = "/cache/recovery/last_locale";
|
||||
static const char *CONVERT_FBE_DIR = "/cache/recovery/convert_fbe";
|
||||
static const char *CONVERT_FBE_FILE = "/cache/recovery/convert_fbe/convert_fbe";
|
||||
static const char *CACHE_ROOT = "/cache";
|
||||
static const char *DATA_ROOT = "/data";
|
||||
static const char *SDCARD_ROOT = "/sdcard";
|
||||
static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log";
|
||||
static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install";
|
||||
|
@ -503,6 +506,7 @@ typedef struct _saved_log_file {
|
|||
|
||||
static bool erase_volume(const char* volume) {
|
||||
bool is_cache = (strcmp(volume, CACHE_ROOT) == 0);
|
||||
bool is_data = (strcmp(volume, DATA_ROOT) == 0);
|
||||
|
||||
ui->SetBackground(RecoveryUI::ERASING);
|
||||
ui->SetProgressType(RecoveryUI::INDETERMINATE);
|
||||
|
@ -557,7 +561,25 @@ static bool erase_volume(const char* volume) {
|
|||
ui->Print("Formatting %s...\n", volume);
|
||||
|
||||
ensure_path_unmounted(volume);
|
||||
int result = format_volume(volume);
|
||||
|
||||
int result;
|
||||
|
||||
if (is_data && reason && strcmp(reason, "convert_fbe") == 0) {
|
||||
// Create convert_fbe breadcrumb file to signal to init
|
||||
// to convert to file based encryption, not full disk encryption
|
||||
mkdir(CONVERT_FBE_DIR, 0700);
|
||||
FILE* f = fopen(CONVERT_FBE_FILE, "wb");
|
||||
if (!f) {
|
||||
ui->Print("Failed to convert to file encryption\n");
|
||||
return true;
|
||||
}
|
||||
fclose(f);
|
||||
result = format_volume(volume, CONVERT_FBE_DIR);
|
||||
remove(CONVERT_FBE_FILE);
|
||||
rmdir(CONVERT_FBE_DIR);
|
||||
} else {
|
||||
result = format_volume(volume);
|
||||
}
|
||||
|
||||
if (is_cache) {
|
||||
while (head) {
|
||||
|
|
|
@ -175,7 +175,7 @@ static int exec_cmd(const char* path, char* const argv[]) {
|
|||
return WEXITSTATUS(status);
|
||||
}
|
||||
|
||||
int format_volume(const char* volume) {
|
||||
int format_volume(const char* volume, const char* directory) {
|
||||
Volume* v = volume_for_path(volume);
|
||||
if (v == NULL) {
|
||||
LOGE("unknown volume \"%s\"\n", volume);
|
||||
|
@ -241,7 +241,7 @@ int format_volume(const char* volume) {
|
|||
}
|
||||
int result;
|
||||
if (strcmp(v->fs_type, "ext4") == 0) {
|
||||
result = make_ext4fs(v->blk_device, length, volume, sehandle);
|
||||
result = make_ext4fs_directory(v->blk_device, length, volume, sehandle, directory);
|
||||
} else { /* Has to be f2fs because we checked earlier. */
|
||||
if (v->key_loc != NULL && strcmp(v->key_loc, "footer") == 0 && length < 0) {
|
||||
LOGE("format_volume: crypt footer + negative length (%zd) not supported on %s\n", length, v->fs_type);
|
||||
|
@ -273,6 +273,10 @@ int format_volume(const char* volume) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
int format_volume(const char* volume) {
|
||||
return format_volume(volume, NULL);
|
||||
}
|
||||
|
||||
int setup_install_mounts() {
|
||||
if (fstab == NULL) {
|
||||
LOGE("can't set up install mounts: no fstab loaded\n");
|
||||
|
|
6
roots.h
6
roots.h
|
@ -41,6 +41,12 @@ int ensure_path_unmounted(const char* path);
|
|||
// it is mounted.
|
||||
int format_volume(const char* volume);
|
||||
|
||||
// Reformat the given volume (must be the mount point only, eg
|
||||
// "/cache"), no paths permitted. Attempts to unmount the volume if
|
||||
// it is mounted.
|
||||
// Copies 'directory' to root of the newly formatted volume
|
||||
int format_volume(const char* volume, const char* directory);
|
||||
|
||||
// Ensure that all and only the volumes that packages expect to find
|
||||
// mounted (/tmp and /cache) are mounted. Returns 0 on success.
|
||||
int setup_install_mounts();
|
||||
|
|
Loading…
Reference in a new issue