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:
Janis Danisevskis 2019-03-14 15:35:48 -07:00
parent 16e12d10c6
commit c7a8b863cd
2 changed files with 19 additions and 0 deletions

View file

@ -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";

View file

@ -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<).