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
diff --git a/hals/keymaster/KeymasterDevice.cpp b/hals/keymaster/KeymasterDevice.cpp
index 63d1447..3c569a0 100644
--- a/hals/keymaster/KeymasterDevice.cpp
+++ b/hals/keymaster/KeymasterDevice.cpp
@@ -117,6 +117,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
@@ -696,12 +707,15 @@
     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);
     if (hidl_params_to_pb(
             attestParams, continueRequest.mutable_params()) != ErrorCode::OK) {
-      _hidl_cb(ErrorCode::INVALID_ARGUMENT, hidl_vec<hidl_vec<uint8_t> >{});
-      return Void();
+        LOG(ERROR) << "Failed to parse attest params";
+        _hidl_cb(ErrorCode::INVALID_ARGUMENT, hidl_vec<hidl_vec<uint8_t> >{});
+        return Void();
     }
 
     KM_CALLV(ContinueAttestKey, continueRequest, continueResponse,
@@ -851,6 +865,7 @@
     }
 
     _hidl_cb(ErrorCode::OK, chain);
+    finalize.release();
     return Void();
 }