diff options
author | nagendra modadugu <ngm@google.com> | 2018-10-10 17:44:34 -0700 |
---|---|---|
committer | JP Sugarbroad <jpsugar@google.com> | 2018-12-06 00:34:21 -0800 |
commit | 2a43a4c0e7642cf9b07fc6d884bc5171d10bb789 (patch) | |
tree | 974f14ea18947a1948d09ec8a13b53103d10fe78 | |
parent | c1ef94962889276bdb3da2dd6aabbf445baa02b9 (diff) | |
download | android-2a43a4c0e7642cf9b07fc6d884bc5171d10bb789.tar.gz |
Merge remote-tracking branch 'goog/upstream-pixel18' into ota-rc8android-security-9.0.0_r76android-security-9.0.0_r75android-security-9.0.0_r74android-security-9.0.0_r73android-security-9.0.0_r72android-security-9.0.0_r71android-security-9.0.0_r70android-security-9.0.0_r69android-security-9.0.0_r68android-security-9.0.0_r67android-security-9.0.0_r66android-security-9.0.0_r65android-security-9.0.0_r64android-security-9.0.0_r63android-security-9.0.0_r62android-9.0.0_r61android-9.0.0_r60android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r49android-9.0.0_r48security-pi-releasepie-security-release
* 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)
-rw-r--r-- | hals/keymaster/KeymasterDevice.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
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 @@ uint32_t DateCodeToUint32(const std::string& code, bool include_day) { 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 @@ Return<void> KeymasterDevice::attestKey( 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 @@ Return<void> KeymasterDevice::attestKey( // verify cert chain _hidl_cb(ErrorCode::OK, hidl_vec<hidl_vec<uint8_t> >(chain)); + finalize.release(); return Void(); } |