From df6ba6dfd235fddb7645bc16573da1a6a7e6b49d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 7 Feb 2019 16:28:03 +0100 Subject: [PATCH] card: Fix a NULL-ptr deref in key listings. * tools/card-tool-keys.c (get_matching_keys): Fix segv. * tools/gpg-card-tool.c (main): Init info. Signed-off-by: Werner Koch --- tools/card-tool-keys.c | 9 ++++++--- tools/gpg-card-tool.c | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/card-tool-keys.c b/tools/card-tool-keys.c index e9edf9818..4e057ad94 100644 --- a/tools/card-tool-keys.c +++ b/tools/card-tool-keys.c @@ -214,9 +214,12 @@ get_matching_keys (const unsigned char *keygrip, int protocol, err = get_matching_keys (keygrip, GNUPG_PROTOCOL_OPENPGP, &kb); if (!err || gpg_err_code (err) == GPG_ERR_NO_PUBKEY) { - *keyblock_tail = kb; - keyblock_tail = &kb->next; - kb = NULL; + if (!err) + { + *keyblock_tail = kb; + keyblock_tail = &kb->next; + kb = NULL; + } err = get_matching_keys (keygrip, GNUPG_PROTOCOL_CMS, &kb); if (!err) { diff --git a/tools/gpg-card-tool.c b/tools/gpg-card-tool.c index 917013247..0dbf2b224 100644 --- a/tools/gpg-card-tool.c +++ b/tools/gpg-card-tool.c @@ -309,7 +309,7 @@ main (int argc, char **argv) } else { - struct card_info_s info_buffer; + struct card_info_s info_buffer = { 0 }; card_info_t info = &info_buffer; err = 0; @@ -2968,7 +2968,7 @@ interactive_loop (void) int redisplay = 1; /* Whether to redisplay the main info. */ int allow_admin = 0; /* Whether admin commands are allowed. */ char *help_arg = NULL; /* Argument of the HELP command. */ - struct card_info_s info_buffer; + struct card_info_s info_buffer = { 0 }; card_info_t info = &info_buffer; char *p; int i;