libsnapshot: Harden merge-in-recovery for factory data resets.
This addresses bugs where unexpected edge cases in the snapshot state could prevent a merge or data wipe from completing in recovery. Invalid snapshots (eg on the wrong slot) are now ignored in CheckMergeState(). This prevents those snapshots from being detected as "cancelled" and thus falling into RemoveAllUpdateState. ProcessUpdateState will no longer call RemoveAllUpdateState in recovery. Furthermore, when RemoveAllUpdateState fails, we will no longer return the "old" state. If this state is Merging, ProcessUpdateState can infinite loop. Finally, HandleImminentDataWipe now guarantees the final state will be either MergeFailed or None. For testing purposes, the old mechanism was too susceptible to state machinery changes. And for practical purposes, either we're going to wipe data (which removes the OTA), or a merge failed and we can't. So the effective outcome is always no update or a failed update. Bug: 179006671 Test: vts_libsnapshot_test Change-Id: Idcb30151e4d35cbeccf14369f09707ae94a57c66
Loading
Please register or sign in to comment