lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 1 Dec 2014 14:37:01 +0200
From:	"Michael S. Tsirkin" <mst@...hat.com>
To:	Cornelia Huck <cornelia.huck@...ibm.com>
Cc:	linux-kernel@...r.kernel.org, David Miller <davem@...emloft.net>,
	rusty@....ibm.com, nab@...ux-iscsi.org, pbonzini@...hat.com,
	thuth@...ux.vnet.ibm.com, dahi@...ux.vnet.ibm.com,
	kvm@...r.kernel.org, virtualization@...ts.linux-foundation.org,
	netdev@...r.kernel.org
Subject: Re: [PATCH v7 31/46] vhost: virtio 1.0 endian-ness support

On Mon, Dec 01, 2014 at 01:33:53PM +0100, Cornelia Huck wrote:
> On Sun, 30 Nov 2014 17:11:49 +0200
> "Michael S. Tsirkin" <mst@...hat.com> wrote:
> 
> > Signed-off-by: Michael S. Tsirkin <mst@...hat.com>
> > ---
> >  drivers/vhost/vhost.c | 93 +++++++++++++++++++++++++++++++--------------------
> >  1 file changed, 56 insertions(+), 37 deletions(-)
> > 
> 
> > @@ -1113,18 +1120,19 @@ static int get_indirect(struct vhost_virtqueue *vq,
> >  {
> >  	struct vring_desc desc;
> >  	unsigned int i = 0, count, found = 0;
> > +	u32 len = vhost32_to_cpu(vq, indirect->len);
> >  	int ret;
> > 
> >  	/* Sanity check */
> > -	if (unlikely(indirect->len % sizeof desc)) {
> > +	if (unlikely(len % sizeof desc)) {
> >  		vq_err(vq, "Invalid length in indirect descriptor: "
> >  		       "len 0x%llx not multiple of 0x%zx\n",
> > -		       (unsigned long long)indirect->len,
> > +		       (unsigned long long)vhost32_to_cpu(vq, indirect->len),
> 
> Can't you use len here?

Not if I want error message to be readable.

> >  		       sizeof desc);
> >  		return -EINVAL;
> >  	}
> > 
> > -	ret = translate_desc(vq, indirect->addr, indirect->len, vq->indirect,
> > +	ret = translate_desc(vq, vhost64_to_cpu(vq, indirect->addr), len, vq->indirect,
> >  			     UIO_MAXIOV);
> >  	if (unlikely(ret < 0)) {
> >  		vq_err(vq, "Translation failure %d in indirect.\n", ret);
> 
> 
> > @@ -1404,7 +1422,7 @@ int vhost_add_used_n(struct vhost_virtqueue *vq, struct vring_used_elem *heads,
> > 
> >  	/* Make sure buffer is written before we update index. */
> >  	smp_wmb();
> > -	if (put_user(vq->last_used_idx, &vq->used->idx)) {
> > +	if (__put_user(cpu_to_vhost16(vq, vq->last_used_idx), &vq->used->idx)) {
> 
> Why s/put_user/__put_user/ - I don't see how endianness conversions
> should have an influence there?

We should generally to __ variants since addresses are pre-validated.
But I agree - should be a separate patch.

> 
> >  		vq_err(vq, "Failed to increment used idx");
> >  		return -EFAULT;
> >  	}
> 
> > @@ -1449,11 +1468,11 @@ static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
> >  	if (unlikely(!v))
> >  		return true;
> > 
> > -	if (get_user(event, vhost_used_event(vq))) {
> > +	if (__get_user(event, vhost_used_event(vq))) {
> 
> Dito: why the change?

Same. Will split this out, it's unrelated to virtio 1.0.

> >  		vq_err(vq, "Failed to get used event idx");
> >  		return true;
> >  	}
> > -	return vring_need_event(event, new, old);
> > +	return vring_need_event(vhost16_to_cpu(vq, event), new, old);
> >  }
> > 
> >  /* This actually signals the guest, using eventfd. */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ