Loading recovery.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -659,6 +659,7 @@ wipe_data(int confirm, Device* device) { device->WipeData(); erase_volume("/data"); erase_volume("/cache"); erase_persistent_partition(); ui->Print("Data wipe complete.\n"); } Loading Loading @@ -959,6 +960,7 @@ main(int argc, char **argv) { if (device->WipeData()) status = INSTALL_ERROR; if (erase_volume("/data")) status = INSTALL_ERROR; if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR; if (erase_persistent_partition() == -1 ) status = INSTALL_ERROR; if (status != INSTALL_SUCCESS) ui->Print("Data wipe failed.\n"); } else if (wipe_cache) { if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR; Loading roots.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ static struct fstab *fstab = NULL; extern struct selabel_handle *sehandle; static const char* PERSISTENT_PATH = "/persistent"; void load_volume_table() { int i; Loading Loading @@ -264,6 +266,41 @@ int format_volume(const char* volume) { return -1; } int erase_persistent_partition() { Volume *v = volume_for_path(PERSISTENT_PATH); if (v == NULL) { // most devices won't have /persistent, so this is not an error. return 0; } int fd = open(v->blk_device, O_RDWR); uint64_t size = get_file_size(fd); if (size == 0) { LOGE("failed to stat size of /persistent\n"); close(fd); return -1; } char oem_unlock_enabled; lseek(fd, size - 1, SEEK_SET); read(fd, &oem_unlock_enabled, 1); if (oem_unlock_enabled) { if (wipe_block_device(fd, size)) { LOGE("error wiping /persistent: %s\n", strerror(errno)); close(fd); return -1; } lseek(fd, size - 1, SEEK_SET); write(fd, &oem_unlock_enabled, 1); } close(fd); return (int) oem_unlock_enabled; } int setup_install_mounts() { if (fstab == NULL) { LOGE("can't set up install mounts: no fstab loaded\n"); Loading roots.h +5 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,11 @@ int format_volume(const char* volume); // mounted (/tmp and /cache) are mounted. Returns 0 on success. int setup_install_mounts(); // Conditionally wipes the /persistent partition if it's marked // to wipe. Returns -1 on failure, 1 if the partition was wiped // and 0 if the partition was not wiped. int erase_persistent_partition(); #ifdef __cplusplus } #endif Loading Loading
recovery.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -659,6 +659,7 @@ wipe_data(int confirm, Device* device) { device->WipeData(); erase_volume("/data"); erase_volume("/cache"); erase_persistent_partition(); ui->Print("Data wipe complete.\n"); } Loading Loading @@ -959,6 +960,7 @@ main(int argc, char **argv) { if (device->WipeData()) status = INSTALL_ERROR; if (erase_volume("/data")) status = INSTALL_ERROR; if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR; if (erase_persistent_partition() == -1 ) status = INSTALL_ERROR; if (status != INSTALL_SUCCESS) ui->Print("Data wipe failed.\n"); } else if (wipe_cache) { if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR; Loading
roots.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ static struct fstab *fstab = NULL; extern struct selabel_handle *sehandle; static const char* PERSISTENT_PATH = "/persistent"; void load_volume_table() { int i; Loading Loading @@ -264,6 +266,41 @@ int format_volume(const char* volume) { return -1; } int erase_persistent_partition() { Volume *v = volume_for_path(PERSISTENT_PATH); if (v == NULL) { // most devices won't have /persistent, so this is not an error. return 0; } int fd = open(v->blk_device, O_RDWR); uint64_t size = get_file_size(fd); if (size == 0) { LOGE("failed to stat size of /persistent\n"); close(fd); return -1; } char oem_unlock_enabled; lseek(fd, size - 1, SEEK_SET); read(fd, &oem_unlock_enabled, 1); if (oem_unlock_enabled) { if (wipe_block_device(fd, size)) { LOGE("error wiping /persistent: %s\n", strerror(errno)); close(fd); return -1; } lseek(fd, size - 1, SEEK_SET); write(fd, &oem_unlock_enabled, 1); } close(fd); return (int) oem_unlock_enabled; } int setup_install_mounts() { if (fstab == NULL) { LOGE("can't set up install mounts: no fstab loaded\n"); Loading
roots.h +5 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,11 @@ int format_volume(const char* volume); // mounted (/tmp and /cache) are mounted. Returns 0 on success. int setup_install_mounts(); // Conditionally wipes the /persistent partition if it's marked // to wipe. Returns -1 on failure, 1 if the partition was wiped // and 0 if the partition was not wiped. int erase_persistent_partition(); #ifdef __cplusplus } #endif Loading