diff options
Diffstat (limited to 'apexd/apexd.cpp')
| -rw-r--r-- | apexd/apexd.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/apexd/apexd.cpp b/apexd/apexd.cpp index 4f5ca52..589b962 100644 --- a/apexd/apexd.cpp +++ b/apexd/apexd.cpp @@ -93,6 +93,8 @@ static constexpr const char* kApexStatusSysprop = "apexd.status"; static constexpr const char* kApexStatusStarting = "starting"; static constexpr const char* kApexStatusReady = "ready"; +static constexpr const char* kBuildFingerprintSysprop = "ro.build.fingerprint"; + static constexpr const char* kApexVerityOnSystemProp = "persist.apexd.verity_on_system"; static bool gForceDmVerityOnSystem = @@ -1372,6 +1374,7 @@ Status scanPackagesDirAndActivate(const char* apex_package_dir) { } void scanStagedSessionsDirAndStage() { + using android::base::GetProperty; LOG(INFO) << "Scanning " << kApexSessionsDir << " looking for sessions to be activated."; @@ -1389,6 +1392,12 @@ void scanStagedSessionsDirAndStage() { }; auto scope_guard = android::base::make_scope_guard(session_failed_fn); + std::string build_fingerprint = GetProperty(kBuildFingerprintSysprop, ""); + if (session.GetBuildFingerprint().compare(build_fingerprint) != 0) { + LOG(ERROR) << "APEX build fingerprint has changed"; + continue; + } + std::vector<std::string> dirsToScan; if (session.GetChildSessionIds().empty()) { dirsToScan.push_back(std::string(kStagedSessionsDir) + "/session_" + @@ -1789,6 +1798,7 @@ void onAllPackagesReady() { StatusOr<std::vector<ApexFile>> submitStagedSession( const int session_id, const std::vector<int>& child_session_ids) { + using android::base::GetProperty; bool needsBackup = true; Status cleanup_status = ClearSessions(); if (!cleanup_status.Ok()) { @@ -1843,6 +1853,8 @@ StatusOr<std::vector<ApexFile>> submitStagedSession( return StatusOr<std::vector<ApexFile>>::MakeError(session.ErrorMessage()); } (*session).SetChildSessionIds(child_session_ids); + std::string build_fingerprint = GetProperty(kBuildFingerprintSysprop, ""); + (*session).SetBuildFingerprint(build_fingerprint); Status commit_status = (*session).UpdateStateAndCommit(SessionState::VERIFIED); if (!commit_status.Ok()) { |
