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] [day] [month] [year] [list]
Message-ID: <20110308172300.GA15768@redhat.com>
Date:	Tue, 8 Mar 2011 19:23:00 +0200
From:	"Michael S. Tsirkin" <mst@...hat.com>
To:	Krishna Kumar <krkumar2@...ibm.com>
Cc:	netdev@...r.kernel.org
Subject: Re: [PATCH] vhost: Cleanup vhost.c and net.c

On Tue, Mar 01, 2011 at 05:06:37PM +0530, Krishna Kumar wrote:
> Minor cleanup of vhost.c and net.c to match coding style.
> 
> Signed-off-by: Krishna Kumar <krkumar2@...ibm.com>

Applied, thanks!

> ---
>  drivers/vhost/net.c   |   19 +++++++++-----
>  drivers/vhost/vhost.c |   53 +++++++++++++++++++++++++++-------------
>  2 files changed, 49 insertions(+), 23 deletions(-)
> 
> diff -ruNp org/drivers/vhost/net.c new/drivers/vhost/net.c
> --- org/drivers/vhost/net.c	2011-03-01 13:33:25.000000000 +0530
> +++ new/drivers/vhost/net.c	2011-03-01 13:36:44.000000000 +0530
> @@ -60,6 +60,7 @@ static int move_iovec_hdr(struct iovec *
>  {
>  	int seg = 0;
>  	size_t size;
> +
>  	while (len && seg < iov_count) {
>  		size = min(from->iov_len, len);
>  		to->iov_base = from->iov_base;
> @@ -79,6 +80,7 @@ static void copy_iovec_hdr(const struct 
>  {
>  	int seg = 0;
>  	size_t size;
> +
>  	while (len && seg < iovcount) {
>  		size = min(from->iov_len, len);
>  		to->iov_base = from->iov_base;
> @@ -296,17 +298,16 @@ static void handle_rx_big(struct vhost_n
>  		.msg_iov = vq->iov,
>  		.msg_flags = MSG_DONTWAIT,
>  	};
> -
>  	struct virtio_net_hdr hdr = {
>  		.flags = 0,
>  		.gso_type = VIRTIO_NET_HDR_GSO_NONE
>  	};
> -
>  	size_t len, total_len = 0;
>  	int err;
>  	size_t hdr_size;
>  	/* TODO: check that we are running from vhost_worker? */
>  	struct socket *sock = rcu_dereference_check(vq->private_data, 1);
> +
>  	if (!sock || skb_queue_empty(&sock->sk->sk_receive_queue))
>  		return;
>  
> @@ -405,18 +406,17 @@ static void handle_rx_mergeable(struct v
>  		.msg_iov = vq->iov,
>  		.msg_flags = MSG_DONTWAIT,
>  	};
> -
>  	struct virtio_net_hdr_mrg_rxbuf hdr = {
>  		.hdr.flags = 0,
>  		.hdr.gso_type = VIRTIO_NET_HDR_GSO_NONE
>  	};
> -
>  	size_t total_len = 0;
>  	int err, headcount;
>  	size_t vhost_hlen, sock_hlen;
>  	size_t vhost_len, sock_len;
>  	/* TODO: check that we are running from vhost_worker? */
>  	struct socket *sock = rcu_dereference_check(vq->private_data, 1);
> +
>  	if (!sock || skb_queue_empty(&sock->sk->sk_receive_queue))
>  		return;
>  
> @@ -654,6 +654,7 @@ static struct socket *get_raw_socket(int
>  	} uaddr;
>  	int uaddr_len = sizeof uaddr, r;
>  	struct socket *sock = sockfd_lookup(fd, &r);
> +
>  	if (!sock)
>  		return ERR_PTR(-ENOTSOCK);
>  
> @@ -682,6 +683,7 @@ static struct socket *get_tap_socket(int
>  {
>  	struct file *file = fget(fd);
>  	struct socket *sock;
> +
>  	if (!file)
>  		return ERR_PTR(-EBADF);
>  	sock = tun_get_socket(file);
> @@ -696,6 +698,7 @@ static struct socket *get_tap_socket(int
>  static struct socket *get_socket(int fd)
>  {
>  	struct socket *sock;
> +
>  	/* special case to disable backend */
>  	if (fd == -1)
>  		return NULL;
> @@ -741,9 +744,9 @@ static long vhost_net_set_backend(struct
>  	oldsock = rcu_dereference_protected(vq->private_data,
>  					    lockdep_is_held(&vq->mutex));
>  	if (sock != oldsock) {
> -                vhost_net_disable_vq(n, vq);
> -                rcu_assign_pointer(vq->private_data, sock);
> -                vhost_net_enable_vq(n, vq);
> +		vhost_net_disable_vq(n, vq);
> +		rcu_assign_pointer(vq->private_data, sock);
> +		vhost_net_enable_vq(n, vq);
>  	}
>  
>  	mutex_unlock(&vq->mutex);
> @@ -768,6 +771,7 @@ static long vhost_net_reset_owner(struct
>  	struct socket *tx_sock = NULL;
>  	struct socket *rx_sock = NULL;
>  	long err;
> +
>  	mutex_lock(&n->dev.mutex);
>  	err = vhost_dev_check_owner(&n->dev);
>  	if (err)
> @@ -829,6 +833,7 @@ static long vhost_net_ioctl(struct file 
>  	struct vhost_vring_file backend;
>  	u64 features;
>  	int r;
> +
>  	switch (ioctl) {
>  	case VHOST_NET_SET_BACKEND:
>  		if (copy_from_user(&backend, argp, sizeof backend))
> diff -ruNp org/drivers/vhost/vhost.c new/drivers/vhost/vhost.c
> --- org/drivers/vhost/vhost.c	2011-01-19 20:01:29.000000000 +0530
> +++ new/drivers/vhost/vhost.c	2011-03-01 13:36:58.000000000 +0530
> @@ -41,8 +41,8 @@ static void vhost_poll_func(struct file 
>  			    poll_table *pt)
>  {
>  	struct vhost_poll *poll;
> -	poll = container_of(pt, struct vhost_poll, table);
>  
> +	poll = container_of(pt, struct vhost_poll, table);
>  	poll->wqh = wqh;
>  	add_wait_queue(wqh, &poll->wait);
>  }
> @@ -85,6 +85,7 @@ void vhost_poll_init(struct vhost_poll *
>  void vhost_poll_start(struct vhost_poll *poll, struct file *file)
>  {
>  	unsigned long mask;
> +
>  	mask = file->f_op->poll(file, &poll->table);
>  	if (mask)
>  		vhost_poll_wakeup(&poll->wait, 0, 0, (void *)mask);
> @@ -101,6 +102,7 @@ static bool vhost_work_seq_done(struct v
>  				unsigned seq)
>  {
>  	int left;
> +
>  	spin_lock_irq(&dev->work_lock);
>  	left = seq - work->done_seq;
>  	spin_unlock_irq(&dev->work_lock);
> @@ -222,6 +224,7 @@ static int vhost_worker(void *data)
>  static long vhost_dev_alloc_iovecs(struct vhost_dev *dev)
>  {
>  	int i;
> +
>  	for (i = 0; i < dev->nvqs; ++i) {
>  		dev->vqs[i].indirect = kmalloc(sizeof *dev->vqs[i].indirect *
>  					       UIO_MAXIOV, GFP_KERNEL);
> @@ -235,6 +238,7 @@ static long vhost_dev_alloc_iovecs(struc
>  			goto err_nomem;
>  	}
>  	return 0;
> +
>  err_nomem:
>  	for (; i >= 0; --i) {
>  		kfree(dev->vqs[i].indirect);
> @@ -247,6 +251,7 @@ err_nomem:
>  static void vhost_dev_free_iovecs(struct vhost_dev *dev)
>  {
>  	int i;
> +
>  	for (i = 0; i < dev->nvqs; ++i) {
>  		kfree(dev->vqs[i].indirect);
>  		dev->vqs[i].indirect = NULL;
> @@ -296,26 +301,28 @@ long vhost_dev_check_owner(struct vhost_
>  }
>  
>  struct vhost_attach_cgroups_struct {
> -        struct vhost_work work;
> -        struct task_struct *owner;
> -        int ret;
> +	struct vhost_work work;
> +	struct task_struct *owner;
> +	int ret;
>  };
>  
>  static void vhost_attach_cgroups_work(struct vhost_work *work)
>  {
> -        struct vhost_attach_cgroups_struct *s;
> -        s = container_of(work, struct vhost_attach_cgroups_struct, work);
> -        s->ret = cgroup_attach_task_all(s->owner, current);
> +	struct vhost_attach_cgroups_struct *s;
> +
> +	s = container_of(work, struct vhost_attach_cgroups_struct, work);
> +	s->ret = cgroup_attach_task_all(s->owner, current);
>  }
>  
>  static int vhost_attach_cgroups(struct vhost_dev *dev)
>  {
> -        struct vhost_attach_cgroups_struct attach;
> -        attach.owner = current;
> -        vhost_work_init(&attach.work, vhost_attach_cgroups_work);
> -        vhost_work_queue(dev, &attach.work);
> -        vhost_work_flush(dev, &attach.work);
> -        return attach.ret;
> +	struct vhost_attach_cgroups_struct attach;
> +
> +	attach.owner = current;
> +	vhost_work_init(&attach.work, vhost_attach_cgroups_work);
> +	vhost_work_queue(dev, &attach.work);
> +	vhost_work_flush(dev, &attach.work);
> +	return attach.ret;
>  }
>  
>  /* Caller should have device mutex */
> @@ -323,11 +330,13 @@ static long vhost_dev_set_owner(struct v
>  {
>  	struct task_struct *worker;
>  	int err;
> +
>  	/* Is there an owner already? */
>  	if (dev->mm) {
>  		err = -EBUSY;
>  		goto err_mm;
>  	}
> +
>  	/* No owner, become one */
>  	dev->mm = get_task_mm(current);
>  	worker = kthread_create(vhost_worker, dev, "vhost-%d", current->pid);
> @@ -380,6 +389,7 @@ long vhost_dev_reset_owner(struct vhost_
>  void vhost_dev_cleanup(struct vhost_dev *dev)
>  {
>  	int i;
> +
>  	for (i = 0; i < dev->nvqs; ++i) {
>  		if (dev->vqs[i].kick && dev->vqs[i].handle_kick) {
>  			vhost_poll_stop(&dev->vqs[i].poll);
> @@ -421,6 +431,7 @@ void vhost_dev_cleanup(struct vhost_dev 
>  static int log_access_ok(void __user *log_base, u64 addr, unsigned long sz)
>  {
>  	u64 a = addr / VHOST_PAGE_SIZE / 8;
> +
>  	/* Make sure 64 bit math will not overflow. */
>  	if (a > ULONG_MAX - (unsigned long)log_base ||
>  	    a + (unsigned long)log_base > ULONG_MAX)
> @@ -461,6 +472,7 @@ static int memory_access_ok(struct vhost
>  			    int log_all)
>  {
>  	int i;
> +
>  	for (i = 0; i < d->nvqs; ++i) {
>  		int ok;
>  		mutex_lock(&d->vqs[i].mutex);
> @@ -527,6 +539,7 @@ static long vhost_set_memory(struct vhos
>  {
>  	struct vhost_memory mem, *newmem, *oldmem;
>  	unsigned long size = offsetof(struct vhost_memory, regions);
> +
>  	if (copy_from_user(&mem, m, size))
>  		return -EFAULT;
>  	if (mem.padding)
> @@ -544,7 +557,8 @@ static long vhost_set_memory(struct vhos
>  		return -EFAULT;
>  	}
>  
> -	if (!memory_access_ok(d, newmem, vhost_has_feature(d, VHOST_F_LOG_ALL))) {
> +	if (!memory_access_ok(d, newmem,
> +			      vhost_has_feature(d, VHOST_F_LOG_ALL))) {
>  		kfree(newmem);
>  		return -EFAULT;
>  	}
> @@ -560,6 +574,7 @@ static int init_used(struct vhost_virtqu
>  		     struct vring_used __user *used)
>  {
>  	int r = put_user(vq->used_flags, &used->flags);
> +
>  	if (r)
>  		return r;
>  	return get_user(vq->last_used_idx, &used->idx);
> @@ -849,6 +864,7 @@ static const struct vhost_memory_region 
>  {
>  	struct vhost_memory_region *reg;
>  	int i;
> +
>  	/* linear search is not brilliant, but we really have on the order of 6
>  	 * regions in practice */
>  	for (i = 0; i < mem->nregions; ++i) {
> @@ -871,6 +887,7 @@ static int set_bit_to_user(int nr, void 
>  	void *base;
>  	int bit = nr + (log % PAGE_SIZE) * 8;
>  	int r;
> +
>  	r = get_user_pages_fast(log, 1, 1, &page);
>  	if (r < 0)
>  		return r;
> @@ -888,6 +905,7 @@ static int log_write(void __user *log_ba
>  {
>  	u64 write_page = write_address / VHOST_PAGE_SIZE;
>  	int r;
> +
>  	if (!write_length)
>  		return 0;
>  	write_length += write_address % VHOST_PAGE_SIZE;
> @@ -1037,8 +1055,8 @@ static int get_indirect(struct vhost_dev
>  			       i, count);
>  			return -EINVAL;
>  		}
> -		if (unlikely(memcpy_fromiovec((unsigned char *)&desc, vq->indirect,
> -					      sizeof desc))) {
> +		if (unlikely(memcpy_fromiovec((unsigned char *)&desc,
> +					      vq->indirect, sizeof desc))) {
>  			vq_err(vq, "Failed indirect descriptor: idx %d, %zx\n",
>  			       i, (size_t)indirect->addr + i * sizeof desc);
>  			return -EINVAL;
> @@ -1317,6 +1335,7 @@ int vhost_add_used_n(struct vhost_virtqu
>  void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq)
>  {
>  	__u16 flags;
> +
>  	/* Flush out used index updates. This is paired
>  	 * with the barrier that the Guest executes when enabling
>  	 * interrupts. */
> @@ -1361,6 +1380,7 @@ bool vhost_enable_notify(struct vhost_vi
>  {
>  	u16 avail_idx;
>  	int r;
> +
>  	if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY))
>  		return false;
>  	vq->used_flags &= ~VRING_USED_F_NO_NOTIFY;
> @@ -1387,6 +1407,7 @@ bool vhost_enable_notify(struct vhost_vi
>  void vhost_disable_notify(struct vhost_virtqueue *vq)
>  {
>  	int r;
> +
>  	if (vq->used_flags & VRING_USED_F_NO_NOTIFY)
>  		return;
>  	vq->used_flags |= VRING_USED_F_NO_NOTIFY;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ