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

Commit 919d2c9a authored by Tao Bao's avatar Tao Bao
Browse files

Call libvintf to verify package compatibility.

The libvintf API has landed. Hook up to do the actual verification.

Bug: 36597505
Test: recovery_component_test
Test: m recoveryimage; adb sideload on angler and sailfish, with
      packages that contain dummy compatibility entries.
Test: m recoveryimage; adb sideload on angler and sailfish, with
      packages that don't contain any compatibility entries.
Change-Id: Idbd6f5aaef605ca51b20e667505d686de5ac781f
(cherry picked from commit da320ac6)
parent 08146728
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ endif
LOCAL_MODULE := librecovery
LOCAL_STATIC_LIBRARIES := \
    libminui \
    libvintf_recovery \
    libcrypto_utils \
    libcrypto \
    libbase
@@ -114,6 +115,9 @@ LOCAL_STATIC_LIBRARIES := \
    libfs_mgr \
    libcrypto_utils \
    libcrypto \
    libvintf_recovery \
    libvintf \
    libtinyxml2 \
    libbase \
    libcutils \
    libutils \
+10 −5
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <vintf/VintfObjectRecovery.h>
#include <ziparchive/zip_archive.h>

#include "common.h"
@@ -539,12 +540,17 @@ bool verify_package_compatibility(ZipArchiveHandle package_zip) {
  }
  CloseArchive(zip_handle);

  // TODO(b/36814503): Enable the actual verification when VintfObject::CheckCompatibility() lands.
  // VintfObject::CheckCompatibility returns zero on success.
  // return (android::vintf::VintfObject::CheckCompatibility(compatibility_info, true) == 0);
  // VintfObjectRecovery::CheckCompatibility returns zero on success.
  std::string err;
  int result = android::vintf::VintfObjectRecovery::CheckCompatibility(compatibility_info, &err);
  if (result == 0) {
    return true;
  }

  LOG(ERROR) << "Failed to verify package compatibility (result " << result << "): " << err;
  return false;
}

static int
really_install_package(const char *path, bool* wipe_cache, bool needs_mount,
                       std::vector<std::string>& log_buffer, int retry_count, int* max_temperature)
@@ -594,7 +600,6 @@ really_install_package(const char *path, bool* wipe_cache, bool needs_mount,

    // Additionally verify the compatibility of the package.
    if (!verify_package_compatibility(zip)) {
      LOG(ERROR) << "Failed to verify package compatibility";
      log_buffer.push_back(android::base::StringPrintf("error: %d", kPackageCompatibilityFailure));
      sysReleaseMap(&map);
      CloseArchive(zip);
+3 −0
Original line number Diff line number Diff line
@@ -132,6 +132,9 @@ LOCAL_STATIC_LIBRARIES := \
    libdivsufsort64 \
    libfs_mgr \
    liblog \
    libvintf_recovery \
    libvintf \
    libtinyxml2 \
    libselinux \
    libext4_utils \
    libsparse \