[libvirt] [PATCH] virNetClientSetTLSSession: Restore original signal mask
Daniel P. Berrange
berrange at redhat.com
Wed Mar 19 17:44:18 UTC 2014
On Wed, Mar 19, 2014 at 06:29:01PM +0100, Michal Privoznik wrote:
> Currently, we use pthread_sigmask(SIG_BLOCK, ...) prior to calling
> poll(). This is okay, as we don't want poll() to be interrupted.
> However, then - immediately as we fall out from the poll() - we try to
> restore the original sigmask - again using SIG_BLOCK. But as the man
> page says, SIG_BLOCK adds signals to the signal mask:
>
> SIG_BLOCK
> The set of blocked signals is the union of the current set and the set argument.
>
> Therefore, when restoring the original mask, we need to completely
> overwrite the one we set earlier and hence we should be using:
>
> SIG_SETMASK
> The set of blocked signals is set to the argument set.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>
> Notes:
> This is a very old bug. It's worth backporting onto all maint branches we have.
>
> src/rpc/virnetclient.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
> index b288b74..255997b 100644
> --- a/src/rpc/virnetclient.c
> +++ b/src/rpc/virnetclient.c
> @@ -792,7 +792,7 @@ int virNetClientSetTLSSession(virNetClientPtr client,
> if (ret < 0 && (errno == EAGAIN || errno == EINTR))
> goto repoll;
>
> - ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL));
> + ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
> }
>
> ret = virNetTLSContextCheckCertificate(tls, client->tls);
> @@ -816,7 +816,7 @@ int virNetClientSetTLSSession(virNetClientPtr client,
> if (ret < 0 && (errno == EAGAIN || errno == EINTR))
> goto repoll2;
>
> - ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL));
> + ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
>
> len = virNetTLSSessionRead(client->tls, buf, 1);
> if (len < 0 && errno != ENOMSG) {
ACK, I see other places in our code get this right already
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list