Fix operation pruning.
The wrong result code was evaluated in order to diagnose
TOO_MANY_OPERATIONS.
This patch uses the correct return code.
Bug: 110565928
Test: Manually tested with KeymasterTests.apk
Merged-In: I57ea735b306c269e1e2fbd9bd0fd9805eb3d0846
Change-Id: I57ea735b306c269e1e2fbd9bd0fd9805eb3d0846
diff --git a/keystore/key_store_service.cpp b/keystore/key_store_service.cpp
index ee13006..1931e58 100644
--- a/keystore/key_store_service.cpp
+++ b/keystore/key_store_service.cpp
@@ -1327,23 +1327,34 @@
result->outParams = outParams;
};
- ErrorCode rc =
+ KeyStoreServiceReturnCode rc =
KS_HANDLE_HIDL_ERROR(dev->begin(keyPurpose, key, opParams.hidl_data(), authToken, hidlCb));
- if (rc != ErrorCode::OK) {
- ALOGW("Got error %d from begin()", rc);
+ if (!rc.isOk()) {
+ LOG(ERROR) << "Got error " << rc << " from begin()";
+ result->resultCode = ResponseCode::SYSTEM_ERROR;
+ return Status::ok();
}
+ rc = result->resultCode;
+
// If there are too many operations abort the oldest operation that was
// started as pruneable and try again.
+ LOG(INFO) << rc << " " << mOperationMap.hasPruneableOperation();
while (rc == ErrorCode::TOO_MANY_OPERATIONS && mOperationMap.hasPruneableOperation()) {
- ALOGW("Ran out of operation handles");
+ LOG(INFO) << "Ran out of operation handles";
if (!pruneOperation()) {
break;
}
rc = KS_HANDLE_HIDL_ERROR(
dev->begin(keyPurpose, key, opParams.hidl_data(), authToken, hidlCb));
+ if (!rc.isOk()) {
+ LOG(ERROR) << "Got error " << rc << " from begin()";
+ result->resultCode = ResponseCode::SYSTEM_ERROR;
+ return Status::ok();
+ }
+ rc = result->resultCode;
}
- if (rc != ErrorCode::OK) {
+ if (!rc.isOk()) {
result->resultCode = rc;
return Status::ok();
}
@@ -1362,8 +1373,8 @@
verificationToken = token;
}));
- if (rc != ErrorCode::OK) result->resultCode = rc;
- if (result->resultCode != ErrorCode::OK) return Status::ok();
+ if (!rc.isOk()) result->resultCode = rc;
+ if (!result->resultCode.isOk()) return Status::ok();
}
// Note: The operation map takes possession of the contents of "characteristics".