diff options
author | Ineiev <[email protected]> | 2016-04-14 15:42:25 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-05-10 05:09:54 +0000 |
commit | 2c2121ff3c2b90f21b75dd56c981b4d9e6d1c0e2 (patch) | |
tree | b144ed759d73cb947789e20368fe2cab57f30d5b | |
parent | gpg: Fix exporting of zero length user ID packets. (diff) | |
download | gnupg-2c2121ff3c2b90f21b75dd56c981b4d9e6d1c0e2.tar.gz gnupg-2c2121ff3c2b90f21b75dd56c981b4d9e6d1c0e2.zip |
g10: Fix secmem leak.
* g10/keygen.c (proc_parameter_file): Fix secmem leak.
--
proc_parameter_file adds certain parameters to the list in the PARA
argument; however, these new entries are leaked because they
are added to head, while the PARA list is released by the caller
of proc_parameter_file.
GnuPG-bug-id: 1371
Signed-off-by: Ineiev <[email protected]>
-rw-r--r-- | g10/keygen.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/g10/keygen.c b/g10/keygen.c index 268fce56f..dc6696a99 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2329,8 +2329,8 @@ proc_parameter_file( struct para_data_s *para, const char *fname, r = xmalloc_clear(sizeof(*r)); r->key = pKEYUSAGE; r->u.usage = openpgp_pk_algo_usage(algo); - r->next = para; - para = r; + r->next = para->next; + para->next = r; } else if (err == -1) return -1; @@ -2363,8 +2363,8 @@ proc_parameter_file( struct para_data_s *para, const char *fname, r = xmalloc_clear (sizeof(*r)); r->key = pSUBKEYUSAGE; r->u.usage = openpgp_pk_algo_usage (algo); - r->next = para; - para = r; + r->next = para->next; + para->next = r; } else if (err == -1) return -1; @@ -2400,8 +2400,8 @@ proc_parameter_file( struct para_data_s *para, const char *fname, p = stpcpy(stpcpy(stpcpy(p," ("), s2 ),")"); if( s3 ) p = stpcpy(stpcpy(stpcpy(p," <"), s3 ),">"); - r->next = para; - para = r; + r->next = para->next; + para->next = r; have_user_id=1; } } @@ -2460,13 +2460,13 @@ proc_parameter_file( struct para_data_s *para, const char *fname, r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_S2K; r->u.s2k = s2k; - r->next = para; - para = r; + r->next = para->next; + para->next = r; r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_DEK; r->u.dek = dek; - r->next = para; - para = r; + r->next = para->next; + para->next = r; } /* Make KEYCREATIONDATE from Creation-Date. */ @@ -2504,8 +2504,8 @@ proc_parameter_file( struct para_data_s *para, const char *fname, r = xmalloc_clear( sizeof *r + 20 ); r->key = pSUBKEYEXPIRE; r->u.expire = seconds; - r->next = para; - para = r; + r->next = para->next; + para->next = r; } if( !!outctrl->pub.newfname ^ !!outctrl->sec.newfname ) { |