From 2afe8583a1d8288bea29c177bf2355d895b6e054 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 10 Feb 2017 17:16:07 +0100 Subject: [PATCH] gpg: Fix memory leak in the error case of signature creation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * g10/sign.c (write_signature_packets): Free SIG. Also replace xcalloc by xtrycalloc. -- If do_sign fails SIG was not released. Note that in the good case SIG is transferred to PKT and freed by free_packet. Reported-by: Stephan Müller Signed-off-by: Werner Koch (cherry picked from commit 5996c7bf99f3a681393fd9589276399ebc956cff) Gbp-Pq: Name 0034-gpg-Fix-memory-leak-in-the-error-case-of-signature-c.patch --- g10/sign.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/g10/sign.c b/g10/sign.c index acc894c..ff099b3 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -686,7 +686,10 @@ write_signature_packets (SK_LIST sk_list, IOBUF out, gcry_md_hd_t hash, pk = sk_rover->pk; /* Build the signature packet. */ - sig = xmalloc_clear (sizeof *sig); + sig = xtrycalloc (1, sizeof *sig); + if (!sig) + return gpg_error_from_syserror (); + if (duration || opt.sig_policy_url || opt.sig_notations || opt.sig_keyserver_url) sig->version = 4; @@ -731,8 +734,12 @@ write_signature_packets (SK_LIST sk_list, IOBUF out, gcry_md_hd_t hash, print_status_sig_created (pk, sig, status_letter); free_packet (&pkt); if (rc) - log_error ("build signature packet failed: %s\n", gpg_strerror (rc)); + log_error ("build signature packet failed: %s\n", + gpg_strerror (rc)); } + else + xfree (sig); + if (rc) return rc; } -- 2.30.2