From 996544626ea416c173a940db47f47f9e5cbd844c Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 30 May 2017 13:56:20 +0900 Subject: [PATCH] agent: Fix memory leaks. * agent/divert-scd.c (ask_for_card): Free WANT_KID and WANT_SN_DISP. * agent/gpg-agent.c (create_server_socket): Free UNADDR. Signed-off-by: NIIBE Yutaka --- agent/divert-scd.c | 8 +++++--- agent/gpg-agent.c | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/agent/divert-scd.c b/agent/divert-scd.c index 153119b38..88b35cd21 100644 --- a/agent/divert-scd.c +++ b/agent/divert-scd.c @@ -52,6 +52,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid) { rc = gpg_error_from_syserror (); xfree (want_sn); + xfree (want_kid); return rc; } @@ -84,6 +85,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid) serialno = NULL; if (!i) { + xfree (want_sn_disp); xfree (want_sn); *r_kid = want_kid; return 0; /* yes, we have the correct card */ @@ -122,9 +124,9 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid) else { rc = agent_get_confirmation (ctrl, desc, NULL, NULL, 0); - if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK && - gpg_err_code (rc) == GPG_ERR_NO_PIN_ENTRY) - rc = gpg_error (GPG_ERR_CARD_NOT_PRESENT); + if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK && + gpg_err_code (rc) == GPG_ERR_NO_PIN_ENTRY) + rc = gpg_error (GPG_ERR_CARD_NOT_PRESENT); xfree (desc); } diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 77b811cbb..44b9be21d 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -2129,6 +2129,7 @@ create_server_socket (char *name, int primary, int cygwin, log_error ("error preparing socket '%s': %s\n", name, gpg_strerror (gpg_error_from_syserror ())); *name = 0; /* Inhibit removal of the socket by cleanup(). */ + xfree (unaddr); agent_exit (2); } if (redirected) @@ -2166,6 +2167,7 @@ create_server_socket (char *name, int primary, int cygwin, "not starting a new one\n")); *name = 0; /* Inhibit removal of the socket by cleanup(). */ assuan_sock_close (fd); + xfree (unaddr); agent_exit (2); } gnupg_remove (unaddr->sun_path); @@ -2178,11 +2180,12 @@ create_server_socket (char *name, int primary, int cygwin, /* We use gpg_strerror here because it allows us to get strings for some W32 socket error codes. */ log_error (_("error binding socket to '%s': %s\n"), - unaddr->sun_path, + unaddr->sun_path, gpg_strerror (gpg_error_from_syserror ())); assuan_sock_close (fd); *name = 0; /* Inhibit removal of the socket by cleanup(). */ + xfree (unaddr); agent_exit (2); } @@ -2195,12 +2198,14 @@ create_server_socket (char *name, int primary, int cygwin, log_error (_("listen() failed: %s\n"), strerror (errno)); *name = 0; /* Inhibit removal of the socket by cleanup(). */ assuan_sock_close (fd); + xfree (unaddr); agent_exit (2); } if (opt.verbose) log_info (_("listening on socket '%s'\n"), unaddr->sun_path); + xfree (unaddr); return fd; }