Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 744885a2 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Avoid to format raw disk if metadata encryption is enabled" am: 5bd36e04

Original change: https://android-review.googlesource.com/c/platform/bootable/recovery/+/1908136

Change-Id: I70a51a1f82f1af672d820fef48736275bce78e8d
parents ab36e4a8 5bd36e04
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include <android-base/stringprintf.h>
#include <android-base/unique_fd.h>
#include <ext4_utils/ext4_utils.h>
#include <ext4_utils/wipe.h>
#include <fs_mgr.h>
#include <fs_mgr/roots.h>

@@ -176,6 +177,25 @@ int format_volume(const std::string& volume, const std::string& directory) {
    }
  }

  // If the raw disk will be used as a metadata encrypted device mapper target,
  // next boot will do encrypt_in_place the raw disk which gives a subtle duration
  // to get any failure in the process. In order to avoid it, let's simply wipe
  // the raw disk if we don't reserve any space, which behaves exactly same as booting
  // after "fastboot -w".
  if (!v->metadata_encryption.empty() && length == 0) {
    android::base::unique_fd fd(open(v->blk_device.c_str(), O_RDWR));
    if (fd == -1) {
      PLOG(ERROR) << "format_volume: failed to open " << v->blk_device;
      return -1;
    }
    int64_t device_size = get_file_size(fd.get(), 0);
    if (device_size > 0 && !wipe_block_device(fd.get(), device_size)) {
      LOG(INFO) << "format_volume: wipe metadata encrypted " << v->blk_device << " with size "
                << device_size;
      return 0;
    }
  }

  if (v->fs_type == "ext4") {
    static constexpr int kBlockSize = 4096;
    std::vector<std::string> mke2fs_args = {