summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Bires <jbires@google.com>2021-06-30 14:24:31 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-06-30 14:24:31 +0000
commitaad76630400684c7af69ff2a92058903d331787e (patch)
tree1ecbd07c6032591312df1167d1f3375da44aa89d
parent49a0cb18c94a86cd94101b00e3c216fcd0bf999c (diff)
parente8a20d042027387a77ebbcb271bc9243fd795557 (diff)
downloadkeymaster-aad76630400684c7af69ff2a92058903d331787e.tar.gz
Merge "Fixing passing pointer to uninitialized object." into sc-dev am: e8a20d0420
Original change: https://googleplex-android-review.googlesource.com/c/platform/system/keymaster/+/15124128 Change-Id: I7a49f311c258579d8a8f70bb98266fe081b592a2
-rw-r--r--km_openssl/openssl_utils.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/km_openssl/openssl_utils.cpp b/km_openssl/openssl_utils.cpp
index b27c434..a0c0300 100644
--- a/km_openssl/openssl_utils.cpp
+++ b/km_openssl/openssl_utils.cpp
@@ -129,31 +129,30 @@ keymaster_error_t GetEcdsa256KeyFromCert(const keymaster_blob_t* km_cert, uint8_
return KM_ERROR_INVALID_ARGUMENT;
}
const uint8_t* temp = km_cert->data;
- X509* cert = d2i_X509(NULL, &temp, km_cert->data_length);
- if (cert == nullptr) return TranslateLastOpenSslError();
- EVP_PKEY* pubKey = X509_get_pubkey(cert);
- if (pubKey == nullptr) return TranslateLastOpenSslError();
- EC_KEY* ecKey = EVP_PKEY_get0_EC_KEY(pubKey);
- if (ecKey == nullptr) return TranslateLastOpenSslError();
+ X509_Ptr cert(d2i_X509(NULL, &temp, km_cert->data_length));
+ if (!cert.get()) return TranslateLastOpenSslError();
+ EVP_PKEY_Ptr pubKey(X509_get_pubkey(cert.get()));
+ if (!pubKey.get()) return TranslateLastOpenSslError();
+ EC_KEY* ecKey = EVP_PKEY_get0_EC_KEY(pubKey.get());
+ if (!ecKey) return TranslateLastOpenSslError();
const EC_POINT* jacobian_coords = EC_KEY_get0_public_key(ecKey);
- if (jacobian_coords == nullptr) return TranslateLastOpenSslError();
- BIGNUM x;
- BIGNUM y;
- BN_CTX* ctx = BN_CTX_new();
- if (ctx == nullptr) return TranslateLastOpenSslError();
- if (!EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ecKey), jacobian_coords, &x, &y,
- ctx)) {
+ if (!jacobian_coords) return TranslateLastOpenSslError();
+ bssl::UniquePtr<BIGNUM> x(BN_new());
+ bssl::UniquePtr<BIGNUM> y(BN_new());
+ BN_CTX_Ptr ctx(BN_CTX_new());
+ if (!ctx.get()) return TranslateLastOpenSslError();
+ if (!EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ecKey), jacobian_coords, x.get(),
+ y.get(), ctx.get())) {
return TranslateLastOpenSslError();
}
uint8_t* tmp_x = x_coord;
- if (BN_bn2binpad(&x, tmp_x, kAffinePointLength) != kAffinePointLength) {
+ if (BN_bn2binpad(x.get(), tmp_x, kAffinePointLength) != kAffinePointLength) {
return TranslateLastOpenSslError();
}
uint8_t* tmp_y = y_coord;
- if (BN_bn2binpad(&y, tmp_y, kAffinePointLength) != kAffinePointLength) {
+ if (BN_bn2binpad(y.get(), tmp_y, kAffinePointLength) != kAffinePointLength) {
return TranslateLastOpenSslError();
}
- BN_CTX_free(ctx);
return KM_ERROR_OK;
}