Merge "DO NOT MERGE KeyStore ChunkedStreamer must tolerate update consuming 0 bytes." into rvc-dev

This commit is contained in:
TreeHugger Robot
2021-10-06 20:40:50 +00:00
committed by Android (Google) Code Review

View File

@@ -139,18 +139,28 @@ class KeyStoreCryptoOperationChunkedStreamer implements KeyStoreCryptoOperationS
} else if (opResult.resultCode != KeyStore.NO_ERROR) { } else if (opResult.resultCode != KeyStore.NO_ERROR) {
throw KeyStore.getKeyStoreException(opResult.resultCode); throw KeyStore.getKeyStoreException(opResult.resultCode);
} }
if (opResult.inputConsumed <= 0) { if (opResult.inputConsumed == 0) {
// Some KM implementations do not consume data in certain block modes unless a
// full block of data was presented.
if (inputLength > 0) {
// More input is available, but it wasn't included into the previous chunk
// because the chunk reached its maximum permitted size.
// Shouldn't have happened.
throw new KeyStoreException(KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH, throw new KeyStoreException(KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH,
"Keystore consumed 0 of " + mChunkLength + " bytes provided."); "Keystore consumed nothing from max-sized chunk: " + mChunkLength
} else if (opResult.inputConsumed > mChunkLength) { + " bytes");
}
} else if (opResult.inputConsumed > mChunkLength || opResult.inputConsumed < 0) {
throw new KeyStoreException(KeymasterDefs.KM_ERROR_UNKNOWN_ERROR, throw new KeyStoreException(KeymasterDefs.KM_ERROR_UNKNOWN_ERROR,
"Keystore consumed more input than provided. Provided: " "Keystore consumed more input than provided (or inputConsumed was "
+ mChunkLength + ", consumed: " + opResult.inputConsumed); + "negative."
+ " Provided: " + mChunkLength
+ ", consumed: " + opResult.inputConsumed);
} }
mChunkLength -= opResult.inputConsumed; mChunkLength -= opResult.inputConsumed;
if (mChunkLength > 0) { if (mChunkLength > 0) {
// Partialy consumed, shift chunk contents // Partially consumed, shift chunk contents
ArrayUtils.copy(mChunk, opResult.inputConsumed, mChunk, 0, mChunkLength); ArrayUtils.copy(mChunk, opResult.inputConsumed, mChunk, 0, mChunkLength);
} }