Reprovision on error 10085 [ DO NOT MERGE ]
[ Merge of http://go/wvgerrit/110603 and http://go/ag/13139808 ] Qualcomm SoC may report 10085 (RSASSA-PSS signature error) when OEMCrypto_PrepareAndSignLicenseRequest is called. The app needs to reprovision (or the user needs to factory reset their device) in order to recover. If the 10085 error is returned, the app currently will get a MediaDrmStateException. The app has no way to be able to tell whether this is due to the 10085 error or some other error. This change returns a NEED_PROVISIONING error at the CDM level, which will result in the app receiving a NotProvisionedException when MediaDrm.getKeyRequest is called. Bug: 174375589 Test: GtsMediaTestCases, WV unit/integration tests Change-Id: I4f2884c8a5fd88ab2e9bfbc0731a20e58cec0f36
This commit is contained in:
@@ -64,6 +64,10 @@ constexpr int kMaxTerminateCountDown = 5;
|
||||
|
||||
const std::string kStringNotAvailable = "NA";
|
||||
|
||||
// TODO(b/174412779): Remove when b/170704368 is fixed.
|
||||
// This is a Qualcomm specific error code
|
||||
const int kRsaSsaPssSignatureLengthError = 10085;
|
||||
|
||||
// Constants relating to OEMCrypto resource rating tiers. These tables are
|
||||
// ordered by resource rating tier from lowest to highest. These should be
|
||||
// updated whenever the supported range of resource rating tiers changes.
|
||||
@@ -126,7 +130,7 @@ void AdvanceDestBuffer(OEMCrypto_DestBufferDesc* dest_buffer, size_t bytes) {
|
||||
return;
|
||||
}
|
||||
LOGE("Unrecognized OEMCryptoBufferType %u - doing nothing",
|
||||
dest_buffer->type);
|
||||
static_cast<unsigned int>(dest_buffer->type));
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -880,6 +884,14 @@ CdmResponseType CryptoSession::PrepareAndSignLicenseRequest(
|
||||
});
|
||||
|
||||
if (OEMCrypto_ERROR_SHORT_BUFFER != sts) {
|
||||
// TODO(b/174412779): Remove when b/170704368 is fixed.
|
||||
// Temporary workaround. If this error is returned the only way to
|
||||
// recover is for the app to reprovision.
|
||||
if (static_cast<int>(sts) == kRsaSsaPssSignatureLengthError) {
|
||||
LOGE("OEMCrypto PrepareAndSignLicenseRequest result = %d",
|
||||
static_cast<int>(sts));
|
||||
return NEED_PROVISIONING;
|
||||
}
|
||||
return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR,
|
||||
"PrepareAndSignLicenseRequest");
|
||||
}
|
||||
@@ -907,6 +919,14 @@ CdmResponseType CryptoSession::PrepareAndSignLicenseRequest(
|
||||
core_message->resize(core_message_length);
|
||||
return NO_ERROR;
|
||||
}
|
||||
// TODO(b/174412779): Remove when b/170704368 is fixed.
|
||||
// Temporary workaround. If this error is returned the only way to
|
||||
// recover is for the app to reprovision.
|
||||
if (static_cast<int>(sts) == kRsaSsaPssSignatureLengthError) {
|
||||
LOGE("OEMCrypto PrepareAndSignLicenseRequest result = %d",
|
||||
static_cast<int>(sts));
|
||||
return NEED_PROVISIONING;
|
||||
}
|
||||
return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR,
|
||||
"PrepareAndSignLicenseRequest");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user