diff -u -p a/crypto/pem/pvkfmt.c b/crypto/pem/pvkfmt.c
--- a/crypto/pem/pvkfmt.c 2009-04-30 13:22:33.000000000 +0200
+++ b/crypto/pem/pvkfmt.c 2009-04-30 13:46:07.000000000 +0200
@@ -746,8 +746,10 @@ static EVP_PKEY *do_PVK_body(const unsig
 			return NULL;
 			}
 		if (!derive_pvk_key(keybuf, p, saltlen,
-			    (unsigned char *)psbuf, inlen))
-			return NULL;
+			    (unsigned char *)psbuf, inlen)) {
+			    	OPENSSL_free(enctmp);
+			    	return NULL;
+			    }
 		p += saltlen;
 		/* Copy BLOBHEADER across, decrypt rest */
 		memcpy(enctmp, p, 8);
