aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2023-10-27 12:20:47 +0000
committerWerner Koch <[email protected]>2023-10-27 12:20:47 +0000
commit95b9a31f81e4a56518269d2476b54a1f10fe8b3e (patch)
tree9d8c0d504ea66e18b56ba719819fd340421c8265
parentgpg: Allow expiration time after 2038-01-19 on 32 bit Windows. (diff)
downloadgnupg-95b9a31f81e4a56518269d2476b54a1f10fe8b3e.tar.gz
gnupg-95b9a31f81e4a56518269d2476b54a1f10fe8b3e.zip
gpg: Fix minor memory leak during certain smartcard operations.
* g10/keygen.c (card_store_key_with_backup): Fix memory leak on error.
-rw-r--r--g10/keygen.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/g10/keygen.c b/g10/keygen.c
index 87940722d..2f8528278 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -5386,17 +5386,26 @@ card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
{
ecdh_param_str = ecdh_param_str_from_pk (sk);
if (!ecdh_param_str)
- return gpg_error_from_syserror ();
+ {
+ free_public_key (sk);
+ return gpg_error_from_syserror ();
+ }
}
err = hexkeygrip_from_pk (sk, &hexgrip);
if (err)
- goto leave;
+ {
+ xfree (ecdh_param_str);
+ free_public_key (sk);
+ goto leave;
+ }
memset(&info, 0, sizeof (info));
rc = agent_scd_getattr ("SERIALNO", &info);
if (rc)
{
+ xfree (ecdh_param_str);
+ free_public_key (sk);
err = (gpg_error_t)rc;
goto leave;
}