From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52485) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SU3NV-0006Lh-2g for qemu-devel@nongnu.org; Mon, 14 May 2012 18:04:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SU3NT-0000Wq-DD for qemu-devel@nongnu.org; Mon, 14 May 2012 18:04:28 -0400 Received: from mail-yw0-f45.google.com ([209.85.213.45]:62193) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SU3NT-0000VW-5r for qemu-devel@nongnu.org; Mon, 14 May 2012 18:04:27 -0400 Received: by yhoo21 with SMTP id o21so6135748yho.4 for ; Mon, 14 May 2012 15:04:25 -0700 (PDT) Sender: fluxion From: Michael Roth Date: Mon, 14 May 2012 17:04:17 -0500 Message-Id: <1337033057-31707-1-git-send-email-mdroth@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 1.1] qemu-ga: fix segv after failure to open log file List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, lcapitulino@redhat.com Currently, if we fail to open the specified log file (generally due to a permissions issue), we'll assign NULL to the logfile handle (stderr, initially) used by the logging routines, which can cause a segfault to occur when we attempt to report the error before exiting. Instead, only re-assign if the open() was successful. Signed-off-by: Michael Roth --- qemu-ga.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/qemu-ga.c b/qemu-ga.c index 3a88333..e2725c8 100644 --- a/qemu-ga.c +++ b/qemu-ga.c @@ -681,6 +681,7 @@ int main(int argc, char **argv) const char *log_filepath = NULL; const char *pid_filepath = QGA_PIDFILE_DEFAULT; const char *state_dir = QGA_STATEDIR_DEFAULT; + FILE *log_file; #ifdef _WIN32 const char *service = NULL; #endif @@ -836,12 +837,13 @@ int main(int argc, char **argv) become_daemon(pid_filepath); } if (log_filepath) { - s->log_file = fopen(log_filepath, "a"); - if (!s->log_file) { + log_file = fopen(log_filepath, "a"); + if (!log_file) { g_critical("unable to open specified log file: %s", strerror(errno)); goto out_bad; } + s->log_file = log_file; } } -- 1.7.4.1