Keymaster support: Verbose vendor errors
Added function for verbosely logging Keymaster vendor errors. Bug: 123562864 Test: atest android.keystore.cts Change-Id: Ida093941d3b76b3d2e953439229081345909c16b
This commit is contained in:
parent
16e12d10c6
commit
c7a8b863cd
2 changed files with 19 additions and 0 deletions
|
@ -106,6 +106,19 @@ std::vector<std::unique_ptr<Keymaster>> enumerateDevices(
|
|||
return result;
|
||||
}
|
||||
|
||||
void Keymaster::logIfKeymasterVendorError(ErrorCode ec) const {
|
||||
static constexpr int32_t k_keymaster_vendor_error_code_range_max = -10000;
|
||||
if (static_cast<int32_t>(ec) <= k_keymaster_vendor_error_code_range_max) {
|
||||
const auto& versionInfo = halVersion();
|
||||
LOG(ERROR) << "Keymaster reported error: " << static_cast<int32_t>(ec) << "\n"
|
||||
<< "NOTE: This is an error in the vendor specific error range.\n"
|
||||
<< " Refer to the vendor of the implementation for details.\n"
|
||||
<< " Implementation name: " << versionInfo.keymasterName << "\n"
|
||||
<< " Vendor name: " << versionInfo.authorName << "\n"
|
||||
<< " MajorVersion: " << versionInfo.majorVersion;
|
||||
}
|
||||
}
|
||||
|
||||
Keymaster::KeymasterSet Keymaster::enumerateAvailableDevices() {
|
||||
auto serviceManager = IServiceManager::getService();
|
||||
CHECK(serviceManager) << "Could not retrieve ServiceManager";
|
||||
|
|
|
@ -64,6 +64,12 @@ class Keymaster : public IKeymasterDevice {
|
|||
const hidl_string& descriptor() const { return descriptor_; }
|
||||
const hidl_string& instanceName() const { return instanceName_; }
|
||||
|
||||
/**
|
||||
* If ec is in the vendor error code range (<-10000), logs the fact to logcat.
|
||||
* There are no side effects otherwise.
|
||||
*/
|
||||
void logIfKeymasterVendorError(ErrorCode ec) const;
|
||||
|
||||
/**
|
||||
* Returns all available Keymaster3 and Keymaster4 instances, in order of most secure to least
|
||||
* secure (as defined by VersionResult::operator<).
|
||||
|
|
Loading…
Reference in a new issue