All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Laszlo Ersek <lersek@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH RFC] main loop: fix some accesses made in sighandler context
Date: Thu, 15 Sep 2011 14:16:51 -0500	[thread overview]
Message-ID: <4E724F23.1020901@codemonkey.ws> (raw)
In-Reply-To: <1316107350-31172-1-git-send-email-lersek@redhat.com>

On 09/15/2011 12:22 PM, Laszlo Ersek wrote:
> Make variables volatile ("sig_atomic_t" should cover "int" and "pid_t").
>
> Also replace calls to functions that are not required to be async-signal-safe
> [1]. (I haven't checked if any signal masks and/or previous suspension of the
> interrupted thread keep the current calls safe.)
>
> termsig_handler()
>    ->  qemu_system_killed(): shutdown_signal, shutdown_pid, no_shutdown [2]
>      ->  qemu_system_shutdown_request(): shutdown_requested
>        ->  qemu_notify_event()
>          ->  qemu_event_increment(): fprintf(), strerror(), exit()
>
> [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_03
> [2] http://lists.nongnu.org/archive/html/qemu-devel/2011-09/msg01757.html
>
> "checkpatch.pl" warned four times about "volatile", and considered the
> zero-initialization of "no_shutdown" (which has static storage duration) an
> error.
>
> Build tested only. Please CC me on any followup, I'm not subscribed. Thank you.
>
> Signed-off-by: Laszlo Ersek<lersek@redhat.com>
> ---
>   cpus.c   |   13 ++++++++++---
>   sysemu.h |    2 +-
>   vl.c     |    6 +++---
>   3 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/cpus.c b/cpus.c
> index 54c188c..ed51247 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -289,9 +289,16 @@ static void qemu_event_increment(void)
>
>       /* EAGAIN is fine, a read must be pending.  */
>       if (ret<  0&&  errno != EAGAIN) {
> -        fprintf(stderr, "qemu_event_increment: write() failed: %s\n",
> -                strerror(errno));
> -        exit (1);
> +        int len;
> +        char buf[128];
> +
> +        /* Don't bother with strerror_[rl]. Make a single attempt to write. */
> +        len = snprintf(buf, sizeof buf,
> +                       "qemu_event_increment: write() failed: %d\n", errno);

I don't think you can rely on snprintf being signal safe.  I think you should 
just exit on failure.

OpenBSD lists snprintf as signal safe, but "probably not on other systems."

Regards,

Anthony Liguori

  reply	other threads:[~2011-09-15 19:16 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-15 17:22 [Qemu-devel] [PATCH RFC] main loop: fix some accesses made in sighandler context Laszlo Ersek
2011-09-15 19:16 ` Anthony Liguori [this message]
2011-09-16  8:08   ` Laszlo Ersek
2011-09-15 19:44 ` Peter Maydell
2011-09-16  7:58   ` Laszlo Ersek
2011-09-16  9:09     ` Markus Armbruster
2011-09-16  8:52 ` [Qemu-devel] [PATCH v2] " Laszlo Ersek
  -- strict thread matches above, loose matches on Subject: below --
2011-09-16 14:31 [Qemu-devel] [PATCH RFC] " Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E724F23.1020901@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=lersek@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.