Merge remote-tracking branch 'goog/upstream-pixel18' into ota-rc8
* goog/upstream-pixel18:
keymaster: abort operations on HAL errors
Bug: 116055338
Bug: 113354499
Test: release tests pass
Change-Id: I788fbbb1ddbbb498e22c387f688caf1c07b1bb42
(cherry picked from commit 877a6e05bb08353a4f806ad4d3c9cf6f1c3fb097)
diff --git a/hals/keymaster/KeymasterDevice.cpp b/hals/keymaster/KeymasterDevice.cpp
index e56590d..d616b3b 100644
--- a/hals/keymaster/KeymasterDevice.cpp
+++ b/hals/keymaster/KeymasterDevice.cpp
@@ -114,6 +114,17 @@
return return_value;
}
+// Helper class to call a finalizer on stack unwind.
+class Finalize {
+ private:
+ std::function<void()> f_;
+
+ public:
+ Finalize(std::function<void()> f) : f_(f) {}
+ ~Finalize() { if (f_) f_(); }
+ void release() { f_ = {}; }
+};
+
} // namespace
// std
@@ -553,6 +564,8 @@
uint64_t operationHandle = startResponse.handle().handle();
ContinueAttestKeyRequest continueRequest;
ContinueAttestKeyResponse continueResponse;
+ // Prepare to abort the pending operation in event of an error.
+ Finalize finalize([&] () { abort(operationHandle); });
continueRequest.mutable_handle()->set_handle(operationHandle);
// TODO
@@ -588,6 +601,7 @@
// verify cert chain
_hidl_cb(ErrorCode::OK, hidl_vec<hidl_vec<uint8_t> >(chain));
+ finalize.release();
return Void();
}