All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, berrange@redhat.com, zxq_yx_007@163.com,
	kraxel@redhat.com, pbonzini@redhat.com,
	marcandre.lureau@redhat.com
Subject: Re: [PATCH 08/11] sockets: Fix socket_sockaddr_to_address_unix() for abstract sockets
Date: Thu, 29 Oct 2020 14:38:37 -0500	[thread overview]
Message-ID: <a30d57a6-2188-12fa-a1e5-e0c015e8f970@redhat.com> (raw)
In-Reply-To: <20201029133833.3450220-9-armbru@redhat.com>

On 10/29/20 8:38 AM, Markus Armbruster wrote:
> Commit 776b97d360 "qemu-sockets: add abstract UNIX domain socket
> support" neglected to update socket_sockaddr_to_address_unix().  The
> function returns a non-abstract socket address for abstract
> sockets (wrong) with a null @path (also wrong; a non-optional QAPI str
> member must never be null).
> 
> The null @path is due to confused code going back all the way to
> commit 17c55decec "sockets: add helpers for creating SocketAddress
> from a socket".
> 
> Add the required special case, and simplify the confused code.
> 
> Fixes: 776b97d3605ed0fc94443048fdf988c7725e38a9
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  util/qemu-sockets.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index c802d5aa0a..801c5e3957 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -1264,10 +1264,20 @@ socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
>  
>      addr = g_new0(SocketAddress, 1);
>      addr->type = SOCKET_ADDRESS_TYPE_UNIX;
> -    if (su->sun_path[0]) {
> -        addr->u.q_unix.path = g_strndup(su->sun_path, sizeof(su->sun_path));
> +#ifdef CONFIG_LINUX
> +    if (!su->sun_path[0]) {
> +        /* Linux abstract socket */
> +        addr->u.q_unix.path = g_strndup(su->sun_path + 1,
> +                                        sizeof(su->sun_path) - 1);
> +        addr->u.q_unix.has_abstract = true;
> +        addr->u.q_unix.abstract = true;
> +        addr->u.q_unix.has_tight = true;
> +        addr->u.q_unix.tight = !su->sun_path[sizeof(su->sun_path) - 1];

This is questionable - how can you tell from the last byte whether the
name was created as tight or not?

> +        return addr;
>      }
> +#endif
>  
> +    addr->u.q_unix.path = g_strdup(su->sun_path);

This is wrong on at least Linux, where su->sun_path need not be
NUL-terminated (allowing file-system Unix sockets to have one more byte
in their name); you need the strndup that you replaced above, in order
avoid reading beyond the end of the array.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



  parent reply	other threads:[~2020-10-29 19:39 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 13:38 [PATCH 00/11] sockets: Attempt to drain the abstract socket swamp Markus Armbruster
2020-10-29 13:38 ` [PATCH 01/11] test-util-sockets: Plug file descriptor leak Markus Armbruster
2020-10-29 17:59   ` Eric Blake
2020-10-29 13:38 ` [PATCH 02/11] test-util-sockets: Correct to set has_abstract, has_tight Markus Armbruster
2020-10-29 18:36   ` Eric Blake
2020-10-29 13:38 ` [PATCH 03/11] test-util-sockets: Clean up SocketAddress construction Markus Armbruster
2020-10-29 18:43   ` Eric Blake
2020-10-30  9:36   ` Daniel P. Berrangé
2020-10-30 14:06     ` Markus Armbruster
2020-10-29 13:38 ` [PATCH 04/11] test-util-sockets: Factor out test_socket_unix_abstract_one() Markus Armbruster
2020-10-29 18:52   ` Eric Blake
2020-10-29 13:38 ` [PATCH 05/11] test-util-sockets: Synchronize properly, don't sleep(1) Markus Armbruster
2020-10-29 18:54   ` Eric Blake
2020-10-30  6:40     ` Markus Armbruster
2020-10-29 13:38 ` [PATCH 06/11] test-util-sockets: Test the complete abstract socket matrix Markus Armbruster
2020-10-29 19:19   ` Eric Blake
2020-10-30  9:33   ` Daniel P. Berrangé
2020-10-30 14:14     ` Markus Armbruster
2020-10-29 13:38 ` [PATCH 07/11] sockets: Fix default of UnixSocketAddress member @tight Markus Armbruster
2020-10-29 17:39   ` Paolo Bonzini
2020-10-29 18:05     ` Paolo Bonzini
2020-10-30  6:58       ` Markus Armbruster
2020-10-29 19:34   ` Eric Blake
2020-10-30  6:54     ` Markus Armbruster
2020-10-29 13:38 ` [PATCH 08/11] sockets: Fix socket_sockaddr_to_address_unix() for abstract sockets Markus Armbruster
2020-10-29 17:47   ` Paolo Bonzini
2020-10-30  8:56     ` Markus Armbruster
2020-10-29 19:38   ` Eric Blake [this message]
2020-10-30  9:04     ` Markus Armbruster
2020-10-30 12:39       ` Eric Blake
2020-10-29 13:38 ` [PATCH 09/11] char-socket: Fix qemu_chr_socket_address() " Markus Armbruster
2020-10-29 19:41   ` Eric Blake
2020-10-30  9:09     ` Markus Armbruster
2020-10-29 13:38 ` [PATCH 10/11] sockets: Bypass "replace empty @path" for abstract unix sockets Markus Armbruster
2020-10-29 19:42   ` Eric Blake
2020-10-29 13:38 ` [PATCH 11/11] sockets: Make abstract UnixSocketAddress depend on CONFIG_LINUX Markus Armbruster
2020-10-29 19:54   ` Eric Blake
2020-10-30  9:25     ` Markus Armbruster
2020-10-29 13:53 ` [PATCH 00/11] sockets: Attempt to drain the abstract socket swamp Marc-André Lureau
2020-10-30 10:11   ` Markus Armbruster
2020-10-30 10:20     ` Daniel P. Berrangé
2020-11-02  8:44       ` Markus Armbruster
2020-11-02  8:57         ` Paolo Bonzini
2020-11-02  9:18         ` Daniel P. Berrangé
2020-11-02  9:59           ` Markus Armbruster
2020-11-02 10:02             ` Daniel P. Berrangé
2020-11-02 11:58               ` Markus Armbruster
2020-10-29 18:06 ` Paolo Bonzini
2020-10-30 10:12   ` Markus Armbruster

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=a30d57a6-2188-12fa-a1e5-e0c015e8f970@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=zxq_yx_007@163.com \
    /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.