mirror of
				https://github.com/meizu-m86/twrp_multirom_m86
				synced 2025-11-04 06:15:41 +08:00 
			
		
		
		
	Create convert_fbe breadcrumb file to support conversion to FBE
Change-Id: I38b29e1e34ea793e4b87cd27a1d39fa905fddf7a
This commit is contained in:
		
							
								
								
									
										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();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user