Open session when checking for OTA keybox support.
[ Merge of http://go/wvgerrit/142089 ] [ Cherry-pick of http://ag/16496425 ] Qualcomm's implementation of GenerateOTARequest requires an open session before attempting to generate an OTA keybox request. When checking for OTA keybox support, the dynamic layer was not opening a session, getting a different error than expected. Coincidentally, this would trick the dynamic layer to thinking it was supported, but hides useful error information. Bug: 210823889 Test: Android manual testing Change-Id: I60662d2d9d411c0f999b619d6088aabdba55e2c3
This commit is contained in:
@@ -1234,14 +1234,28 @@ class Adapter {
|
||||
bool IsOTAKeyboxSupported() {
|
||||
if (!level1_valid_) return false;
|
||||
if (!level1_.GenerateOTARequest) return false;
|
||||
if (!level1_.OpenSession || !level1_.CloseSession) return false;
|
||||
OEMCrypto_SESSION session = 0;
|
||||
OEMCryptoResult result = level1_.OpenSession(&session);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("Failed to open keybox OTA session: result = %d", result);
|
||||
return false;
|
||||
}
|
||||
size_t buffer_size = 500; // a large buffer.
|
||||
std::vector<uint8_t> buffer(buffer_size);
|
||||
OEMCryptoResult result =
|
||||
level1_.GenerateOTARequest(0, buffer.data(), &buffer_size, 0);
|
||||
result =
|
||||
level1_.GenerateOTARequest(session, buffer.data(), &buffer_size, 0);
|
||||
if (result == OEMCrypto_ERROR_SHORT_BUFFER) {
|
||||
buffer.resize(buffer_size);
|
||||
result = level1_.GenerateOTARequest(0, buffer.data(), &buffer_size, 0);
|
||||
result =
|
||||
level1_.GenerateOTARequest(session, buffer.data(), &buffer_size, 0);
|
||||
}
|
||||
if (result != OEMCrypto_SUCCESS &&
|
||||
result != OEMCrypto_ERROR_NOT_IMPLEMENTED) {
|
||||
LOGE("Unexpected OTA error: buffer_size = %zu, result = %d", buffer_size,
|
||||
static_cast<int>(result));
|
||||
}
|
||||
level1_.CloseSession(session);
|
||||
return result == OEMCrypto_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user