summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIris Chang2017-09-14 02:23:18 -0500
committerHung-ying Tyan2017-10-05 20:51:46 -0500
commit926a8e7440a0c85d39dbf7143bfe03964363ddec (patch)
tree444d830855c5c05d3532218c9babe4682a67e9b8
parentff7dcd7e4d50ce99f57bd0cee90aded7036c5388 (diff)
downloadplatform-hardware-interfaces-926a8e7440a0c85d39dbf7143bfe03964363ddec.tar.gz
platform-hardware-interfaces-926a8e7440a0c85d39dbf7143bfe03964363ddec.tar.xz
platform-hardware-interfaces-926a8e7440a0c85d39dbf7143bfe03964363ddec.zip
VTS: fix VtsHalKeymasterV3_0Target issue
Failed cases: AttestationTest.RsaAttestation AttestationTest.EcAttestation Analysis: The verify_attestation_record() in Keymaster_hidl_hal_test.cpp calls parse_attestation_record() to set the value of att_challenge. It fails to compare att_challenge with challenge by memcmp. Because setToExternal() method uses buffer pointer to local variable (record), not use memcpy to copy into itself buffer in parse_attestation_record(). When it leaves the parse_attestation_record(), we will get the att_challenge which is null buffer to compare with challenge incorrectly. Fix: use memcpy to copy the buffer. Bug: 65039571 Test: build passed. VtsHalKeymasterV3_0Target -> PASSED: 106, FAILED: 0. Change-Id: I700a9242cc9a5f4cb196b62860823601e4088531 Merged-In: I700a9242cc9a5f4cb196b62860823601e4088531 (cherry picked from 54ca32a130a0450b444848046199d62876b55301)
-rw-r--r--keymaster/3.0/vts/functional/attestation_record.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/keymaster/3.0/vts/functional/attestation_record.cpp b/keymaster/3.0/vts/functional/attestation_record.cpp
index 5d96fff8..a428989d 100644
--- a/keymaster/3.0/vts/functional/attestation_record.cpp
+++ b/keymaster/3.0/vts/functional/attestation_record.cpp
@@ -274,10 +274,12 @@ ErrorCode parse_attestation_record(const uint8_t* asn1_key_desc, size_t asn1_key
274 *keymaster_security_level = 274 *keymaster_security_level =
275 static_cast<SecurityLevel>(ASN1_ENUMERATED_get(record->keymaster_security_level)); 275 static_cast<SecurityLevel>(ASN1_ENUMERATED_get(record->keymaster_security_level));
276 276
277 attestation_challenge->setToExternal(record->attestation_challenge->data, 277 auto& chall = record->attestation_challenge;
278 record->attestation_challenge->length); 278 attestation_challenge->resize(chall->length);
279 279 memcpy(attestation_challenge->data(), chall->data, chall->length);
280 unique_id->setToExternal(record->unique_id->data, record->unique_id->length); 280 auto& uid = record->unique_id;
281 unique_id->resize(uid->length);
282 memcpy(unique_id->data(), uid->data, uid->length);
281 283
282 ErrorCode error = extract_auth_list(record->software_enforced, software_enforced); 284 ErrorCode error = extract_auth_list(record->software_enforced, software_enforced);
283 if (error != ErrorCode::OK) return error; 285 if (error != ErrorCode::OK) return error;