diff options
author | Iris Chang | 2017-09-14 02:23:18 -0500 |
---|---|---|
committer | Hung-ying Tyan | 2017-10-05 20:51:46 -0500 |
commit | 926a8e7440a0c85d39dbf7143bfe03964363ddec (patch) | |
tree | 444d830855c5c05d3532218c9babe4682a67e9b8 | |
parent | ff7dcd7e4d50ce99f57bd0cee90aded7036c5388 (diff) | |
download | platform-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.cpp | 10 |
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; |