All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Albert Esteve <aesteve@redhat.com>
Cc: qemu-devel@nongnu.org, dbassey@redhat.com,
	Stefano Garzarella <sgarzare@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH] vhost-user: fix shared object return values
Date: Thu, 17 Oct 2024 09:44:22 +0100	[thread overview]
Message-ID: <ZxDOZjIixsfvGuQT@redhat.com> (raw)
In-Reply-To: <20241016090606.2358056-1-aesteve@redhat.com>

On Wed, Oct 16, 2024 at 11:06:06AM +0200, Albert Esteve wrote:
> VHOST_USER_BACKEND_SHARED_OBJECT_ADD and
> VHOST_USER_BACKEND_SHARED_OBJECT_REMOVE state
> in the spec that they return 0 for successful
> operations, non-zero otherwise. However,
> implementation relies on the return types
> of the virtio-dmabuf library, with opposite
> semantics (true if everything is correct,
> false otherwise). Therefore, current implementaion
> violates the specification.
> 
> Revert the logic so that the implementation
> of the vhost-user handling methods matches
> the specification.
> 
> Fixes: 043e127a126bb3ceb5fc753deee27d261fd0c5ce
> Fixes: 160947666276c5b7f6bca4d746bcac2966635d79
> Signed-off-by: Albert Esteve <aesteve@redhat.com>
> ---
>  hw/virtio/vhost-user.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index 00561daa06..90917352a4 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -1607,7 +1607,7 @@ vhost_user_backend_handle_shared_object_add(struct vhost_dev *dev,
>      QemuUUID uuid;
>  
>      memcpy(uuid.data, object->uuid, sizeof(object->uuid));
> -    return virtio_add_vhost_device(&uuid, dev);
> +    return !virtio_add_vhost_device(&uuid, dev);
>  }

This virtio_add_vhost_device() method returns a bool, but this
vhost_user_backend_handle_shared_object_add() method returns
an int, but fills that int with an inverted bool value. The
caller then assigns the return value to an int, but then
interprets the int as a bool, and assigns that bool result
to an u64.

This call chain is madness :-(

Change vhost_user_backend_handle_shared_object_add to return
a bool to reduce the madness IMHO.

>  
>  static int
> @@ -1623,16 +1623,16 @@ vhost_user_backend_handle_shared_object_remove(struct vhost_dev *dev,
>          struct vhost_dev *owner = virtio_lookup_vhost_device(&uuid);
>          if (dev != owner) {
>              /* Not allowed to remove non-owned entries */
> -            return 0;
> +            return -EPERM;
>          }
>          break;
>      }
>      default:
>          /* Not allowed to remove non-owned entries */
> -        return 0;
> +        return -EPERM;
>      }
>  
> -    return virtio_remove_resource(&uuid);
> +    return !virtio_remove_resource(&uuid);
>  }

These return values are inconsistent.

In some places you're returning a negative errno, but in this
last place you're returning true or false, by calling
virtio_remove_resource which is a 'bool' method & inverting it.

On top of this inconsistency, it has all the same madness mentioneed
above.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  parent reply	other threads:[~2024-10-17  8:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-16  9:06 [PATCH] vhost-user: fix shared object return values Albert Esteve
2024-10-17  7:38 ` Stefano Garzarella
2024-10-17  8:27   ` Albert Esteve
2024-10-17  9:38     ` Stefano Garzarella
2024-10-21  7:35       ` Albert Esteve
2024-10-17  8:44 ` Daniel P. Berrangé [this message]
2024-10-17  9:12   ` Albert Esteve
2024-10-17  9:17     ` Daniel P. Berrangé
2024-10-17  9:28       ` Albert Esteve
2024-10-17  9:33         ` Daniel P. Berrangé

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=ZxDOZjIixsfvGuQT@redhat.com \
    --to=berrange@redhat.com \
    --cc=aesteve@redhat.com \
    --cc=dbassey@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sgarzare@redhat.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.