From 32253d92eb8c133bbc8c94bb61ddce2fb83402a7 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Thu, 20 Feb 2020 20:06:51 -0800 Subject: [PATCH] libsnapshot: handle errors in RemoveAllUpdateState appropriately. In CheckMergeState / HandleCancelledUpdate, if removing update state fails, just return the previous state. It used to return Cancelled, and the error goes unnoticed. Test: pass Bug: 147696014 Change-Id: I9cb3d20c5c886afa1913740c903eaad08f0cc041 --- fs_mgr/libsnapshot/snapshot.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp index 9b7f5bc3d..8e0be53c8 100644 --- a/fs_mgr/libsnapshot/snapshot.cpp +++ b/fs_mgr/libsnapshot/snapshot.cpp @@ -829,7 +829,9 @@ UpdateState SnapshotManager::CheckMergeState(const std::function& before // lock, because flock() might have failed. AcknowledgeMergeSuccess(lock.get()); } else if (state == UpdateState::Cancelled) { - RemoveAllUpdateState(lock.get(), before_cancel); + if (!RemoveAllUpdateState(lock.get(), before_cancel)) { + return ReadSnapshotUpdateStatus(lock.get()).state(); + } } return state; } @@ -1186,8 +1188,7 @@ bool SnapshotManager::HandleCancelledUpdate(LockedFile* lock, // If all snapshots were reflashed, then cancel the entire update. if (AreAllSnapshotsCancelled(lock)) { LOG(WARNING) << "Detected re-flashing, cancelling unverified update."; - RemoveAllUpdateState(lock, before_cancel); - return true; + return RemoveAllUpdateState(lock, before_cancel); } // If update has been rolled back, then cancel the entire update. @@ -1209,8 +1210,7 @@ bool SnapshotManager::HandleCancelledUpdate(LockedFile* lock, } LOG(WARNING) << "Detected rollback, cancelling unverified update."; - RemoveAllUpdateState(lock, before_cancel); - return true; + return RemoveAllUpdateState(lock, before_cancel); } std::unique_ptr SnapshotManager::ReadCurrentMetadata() {