All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kurz <groug@kaod.org>
To: Halil Pasic <pasic@linux.vnet.ibm.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	kvm@vger.kernel.org, virtualization@lists.linux-foundation.org,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	"Michael A. Tebolt" <miket@us.ibm.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [PATCH] vhost: fix initialization for vq->is_le
Date: Mon, 30 Jan 2017 20:06:58 +0100	[thread overview]
Message-ID: <20170130200658.73f8dab6@bahia.lan> (raw)
In-Reply-To: <20170130100936.17065-1-pasic@linux.vnet.ibm.com>

On Mon, 30 Jan 2017 11:09:36 +0100
Halil Pasic <pasic@linux.vnet.ibm.com> wrote:

> Currently, under certain circumstances vhost_init_is_le does just a part
> of the initialization job, and depends on vhost_reset_is_le being called
> too. For this reason vhost_vq_init_access used to call vhost_reset_is_le
> when vq->private_data is NULL. This is not only counter intuitive, but
> also real a problem because it breaks vhost_net. The bug was introduced to
> vhost_net with commit 2751c9882b94 ("vhost: cross-endian support for
> legacy devices"). The symptom is corruption of the vq's used.idx field
> (virtio) after VHOST_NET_SET_BACKEND was issued as a part of the vhost
> shutdown on a vq with pending descriptors.
> 
> Let us make sure the outcome of vhost_init_is_le never depend on the state
> it is actually supposed to initialize, and fix virtio_net by removing the
> reset from vhost_vq_init_access.
> 
> With the above, there is no reason for vhost_reset_is_le to do just half
> of the job. Let us make vhost_reset_is_le reinitialize is_le.
> 
> Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com>
> Reported-by: Michael A. Tebolt <miket@us.ibm.com>
> Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> Fixes: commit 2751c9882b94 ("vhost: cross-endian support for legacy devices")
> ---

Reviewed-by: Greg Kurz <groug@kaod.org>

> 
> The bug was already discussed here: 
> http://www.spinics.net/lists/kvm/msg144365.html
> This is a follow up patch.
> 
> ---
>  drivers/vhost/vhost.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
> index d643260..8f99fe0 100644
> --- a/drivers/vhost/vhost.c
> +++ b/drivers/vhost/vhost.c
> @@ -130,14 +130,14 @@ static long vhost_get_vring_endian(struct vhost_virtqueue *vq, u32 idx,
>  
>  static void vhost_init_is_le(struct vhost_virtqueue *vq)
>  {
> -	if (vhost_has_feature(vq, VIRTIO_F_VERSION_1))
> -		vq->is_le = true;
> +	vq->is_le = vhost_has_feature(vq, VIRTIO_F_VERSION_1)
> +		|| virtio_legacy_is_little_endian();
>  }
>  #endif /* CONFIG_VHOST_CROSS_ENDIAN_LEGACY */
>  
>  static void vhost_reset_is_le(struct vhost_virtqueue *vq)
>  {
> -	vq->is_le = virtio_legacy_is_little_endian();
> +	vhost_init_is_le(vq);
>  }
>  
>  struct vhost_flush_struct {
> @@ -1714,10 +1714,8 @@ int vhost_vq_init_access(struct vhost_virtqueue *vq)
>  	int r;
>  	bool is_le = vq->is_le;
>  
> -	if (!vq->private_data) {
> -		vhost_reset_is_le(vq);
> +	if (!vq->private_data)
>  		return 0;
> -	}
>  
>  	vhost_init_is_le(vq);
>  

  parent reply	other threads:[~2017-01-30 21:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-30 10:09 [PATCH] vhost: fix initialization for vq->is_le Halil Pasic
2017-01-30 19:06 ` Greg Kurz
2017-01-30 19:06 ` Greg Kurz [this message]
2017-01-31 15:56   ` Halil Pasic
2017-01-31 18:28     ` Michael S. Tsirkin
2017-02-01 14:29       ` Halil Pasic
2017-02-01 14:19     ` Greg Kurz
2017-02-01 14:19     ` Greg Kurz
2017-02-04  2:27 ` Jason Wang

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=20170130200658.73f8dab6@bahia.lan \
    --to=groug@kaod.org \
    --cc=cornelia.huck@de.ibm.com \
    --cc=dgilbert@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=miket@us.ibm.com \
    --cc=mst@redhat.com \
    --cc=pasic@linux.vnet.ibm.com \
    --cc=virtualization@lists.linux-foundation.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.