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

Commit 6014db5d authored by Tao Bao's avatar Tao Bao Committed by Gerrit Code Review
Browse files

Merge "Fix the wrong parameter when calling read_metadata_from_package()."

parents f09efaff 1b2a98bd
Loading
Loading
Loading
Loading
+35 −37
Original line number Diff line number Diff line
@@ -793,46 +793,44 @@ static bool wipe_cache(bool should_confirm, Device* device) {
    return success;
}

// Secure-wipe a given partition. It uses BLKSECDISCARD, if supported.
// Otherwise, it goes with BLKDISCARD (if device supports BLKDISCARDZEROES) or
// BLKZEROOUT.
// Secure-wipe a given partition. It uses BLKSECDISCARD, if supported. Otherwise, it goes with
// BLKDISCARD (if device supports BLKDISCARDZEROES) or BLKZEROOUT.
static bool secure_wipe_partition(const std::string& partition) {
  android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(partition.c_str(), O_WRONLY)));
  if (fd == -1) {
        PLOG(ERROR) << "failed to open \"" << partition << "\"";
    PLOG(ERROR) << "Failed to open \"" << partition << "\"";
    return false;
  }

  uint64_t range[2] = { 0, 0 };
  if (ioctl(fd, BLKGETSIZE64, &range[1]) == -1 || range[1] == 0) {
        PLOG(ERROR) << "failed to get partition size";
    PLOG(ERROR) << "Failed to get partition size";
    return false;
  }
    printf("Secure-wiping \"%s\" from %" PRIu64 " to %" PRIu64 ".\n",
           partition.c_str(), range[0], range[1]);
  LOG(INFO) << "Secure-wiping \"" << partition << "\" from " << range[0] << " to " << range[1];

    printf("Trying BLKSECDISCARD...\t");
  LOG(INFO) << "  Trying BLKSECDISCARD...";
  if (ioctl(fd, BLKSECDISCARD, &range) == -1) {
        printf("failed: %s\n", strerror(errno));
    PLOG(WARNING) << "  Failed";

    // Use BLKDISCARD if it zeroes out blocks, otherwise use BLKZEROOUT.
    unsigned int zeroes;
    if (ioctl(fd, BLKDISCARDZEROES, &zeroes) == 0 && zeroes != 0) {
            printf("Trying BLKDISCARD...\t");
      LOG(INFO) << "  Trying BLKDISCARD...";
      if (ioctl(fd, BLKDISCARD, &range) == -1) {
                printf("failed: %s\n", strerror(errno));
        PLOG(ERROR) << "  Failed";
        return false;
      }
    } else {
            printf("Trying BLKZEROOUT...\t");
      LOG(INFO) << "  Trying BLKZEROOUT...";
      if (ioctl(fd, BLKZEROOUT, &range) == -1) {
                printf("failed: %s\n", strerror(errno));
        PLOG(ERROR) << "  Failed";
        return false;
      }
    }
  }

    printf("done\n");
  LOG(INFO) << "  Done";
  return true;
}

@@ -865,7 +863,7 @@ static bool check_wipe_package(size_t wipe_package_size) {
        return false;
    }
    std::string metadata;
    if (!read_metadata_from_package(&zip, &metadata)) {
    if (!read_metadata_from_package(zip, &metadata)) {
        CloseArchive(zip);
        return false;
    }