From 630d6adf32cecaab0ee184618f56497bd50400fb Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Wed, 16 Oct 2019 10:39:20 +0200 Subject: [PATCH] pkcs15-prkey: Avoid memory leak https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16625 --- src/libopensc/pkcs15-prkey.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libopensc/pkcs15-prkey.c b/src/libopensc/pkcs15-prkey.c index 9f9ac7e1..228a7b3d 100644 --- a/src/libopensc/pkcs15-prkey.c +++ b/src/libopensc/pkcs15-prkey.c @@ -258,6 +258,13 @@ int sc_pkcs15_decode_prkdf_entry(struct sc_pkcs15_card *p15card, memset(gostr3410_params, 0, sizeof(gostr3410_params)); r = sc_asn1_decode_choice(ctx, asn1_prkey, *buf, *buflen, buf, buflen); + if (r < 0) { + /* This might have allocated something. If so, clear it now */ + if (asn1_com_prkey_attr->flags & SC_ASN1_PRESENT && + asn1_com_prkey_attr[0].flags & SC_ASN1_PRESENT) { + free(asn1_com_prkey_attr[0].parm); + } + } if (r == SC_ERROR_ASN1_END_OF_CONTENTS) return r; LOG_TEST_RET(ctx, r, "PrKey DF ASN.1 decoding failed");