From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37228) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gSZUQ-0004l1-Q5 for qemu-devel@nongnu.org; Thu, 29 Nov 2018 22:29:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gSZUN-0000T8-Kx for qemu-devel@nongnu.org; Thu, 29 Nov 2018 22:29:14 -0500 Received: from mx2.suse.de ([195.135.220.15]:46062 helo=mx1.suse.de) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gSZUN-0000QN-DR for qemu-devel@nongnu.org; Thu, 29 Nov 2018 22:29:11 -0500 References: <20181129100340.13823-1-fli@suse.com> <20181129100340.13823-2-fli@suse.com> <87r2f482wl.fsf@dusky.pond.sub.org> From: Fei Li Message-ID: Date: Fri, 30 Nov 2018 11:29:02 +0800 MIME-Version: 1.0 In-Reply-To: <87r2f482wl.fsf@dusky.pond.sub.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [Qemu-devel] [PATCH RFC v2 1/5] Fix segmentation fault when qemu_signal_init fails List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: qemu-devel@nongnu.org, Fam Zheng , Paolo Bonzini On 11/29/2018 08:49 PM, Markus Armbruster wrote: > You neglected to cc the maintainer. I'm doing that for you now. Cc'ing > maintainers is important to maximize your chances at getting your > patches picked up. Use scripts/get_maintainer.pl to find them. Got it, thanks so much for this tip! :) Have a nice day Fei > > Fei Li writes: > >> When qemu_signal_init() fails in qemu_init_main_loop(), we return >> without setting an error. Its callers crash then when they try to >> report the error with error_report_err(). >> >> To avoid such segmentation fault, add a new Error parameter to make >> the call trace to propagate the err to the final caller. >> >> Fixes: 2f78e491d7b46542158ce0b8132ee4e05bc0ade4 >> Cc: Markus Armbruster >> Cc: Fam Zheng >> Signed-off-by: Fei Li >> Reviewed-by: Fam Zheng >> Reviewed-by: Markus Armbruster >> --- >> util/main-loop.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/util/main-loop.c b/util/main-loop.c >> index affe0403c5..443cb4cfe8 100644 >> --- a/util/main-loop.c >> +++ b/util/main-loop.c >> @@ -71,7 +71,7 @@ static void sigfd_handler(void *opaque) >> } >> } >> >> -static int qemu_signal_init(void) >> +static int qemu_signal_init(Error **errp) >> { >> int sigfd; >> sigset_t set; >> @@ -96,7 +96,7 @@ static int qemu_signal_init(void) >> sigdelset(&set, SIG_IPI); >> sigfd = qemu_signalfd(&set); >> if (sigfd == -1) { >> - fprintf(stderr, "failed to create signalfd\n"); >> + error_setg_errno(errp, errno, "failed to create signalfd"); >> return -errno; >> } >> >> @@ -109,7 +109,7 @@ static int qemu_signal_init(void) >> >> #else /* _WIN32 */ >> >> -static int qemu_signal_init(void) >> +static int qemu_signal_init(Error **errp) >> { >> return 0; >> } >> @@ -148,7 +148,7 @@ int qemu_init_main_loop(Error **errp) >> >> init_clocks(qemu_timer_notify_cb); >> >> - ret = qemu_signal_init(); >> + ret = qemu_signal_init(errp); >> if (ret) { >> return ret; >> } >