Message ID | 20181129100340.13823-2-fli@suse.com |
---|---|
State | New |
Headers | show |
Series | fix some segmentation faults and migration issues | expand |
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. Fei Li <fli@suse.com> 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 <armbru@redhat.com> > Cc: Fam Zheng <famz@redhat.com> > Signed-off-by: Fei Li <fli@suse.com> > Reviewed-by: Fam Zheng <famz@redhat.com> > Reviewed-by: Markus Armbruster <armbru@redhat.com> > --- > 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; > }
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 <fli@suse.com> 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 <armbru@redhat.com> >> Cc: Fam Zheng <famz@redhat.com> >> Signed-off-by: Fei Li <fli@suse.com> >> Reviewed-by: Fam Zheng <famz@redhat.com> >> Reviewed-by: Markus Armbruster <armbru@redhat.com> >> --- >> 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; >> } >
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; }