Re: [PATCH v2 2/5] iio: Return -ENODEV for file operations if the device has been unregistered

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/04/13 12:06, Lars-Peter Clausen wrote:
> If the IIO device has been unregistered return -ENODEV for any further file
> operations like read() and ioctl(). This avoids userspace being able to grab new
> references to the device.
> 
> Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx>
Applied to the togreg branch of iio.git

Thanks
> ---
> No changes since v1
> ---
>  drivers/iio/industrialio-buffer.c | 6 ++++++
>  drivers/iio/industrialio-core.c   | 3 +++
>  drivers/iio/industrialio-event.c  | 6 ++++++
>  3 files changed, 15 insertions(+)
> 
> diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
> index 36c39dc..6c7a9c5 100644
> --- a/drivers/iio/industrialio-buffer.c
> +++ b/drivers/iio/industrialio-buffer.c
> @@ -48,6 +48,9 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
>  	struct iio_dev *indio_dev = filp->private_data;
>  	struct iio_buffer *rb = indio_dev->buffer;
>  
> +	if (!indio_dev->info)
> +		return -ENODEV;
> +
>  	if (!rb || !rb->access->read_first_n)
>  		return -EINVAL;
>  	return rb->access->read_first_n(rb, n, buf);
> @@ -62,6 +65,9 @@ unsigned int iio_buffer_poll(struct file *filp,
>  	struct iio_dev *indio_dev = filp->private_data;
>  	struct iio_buffer *rb = indio_dev->buffer;
>  
> +	if (!indio_dev->info)
> +		return -ENODEV;
> +
>  	poll_wait(filp, &rb->pollq, wait);
>  	if (rb->stufftoread)
>  		return POLLIN | POLLRDNORM;
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index 0dfaf9e..c9c6558 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1041,6 +1041,9 @@ static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
>  	int __user *ip = (int __user *)arg;
>  	int fd;
>  
> +	if (!indio_dev->info)
> +		return -ENODEV;
> +
>  	if (cmd == IIO_GET_EVENT_FD_IOCTL) {
>  		fd = iio_event_getfd(indio_dev);
>  		if (copy_to_user(ip, &fd, sizeof(fd)))
> diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
> index 36f0c8e..837d450 100644
> --- a/drivers/iio/industrialio-event.c
> +++ b/drivers/iio/industrialio-event.c
> @@ -76,6 +76,9 @@ static unsigned int iio_event_poll(struct file *filep,
>  	struct iio_event_interface *ev_int = indio_dev->event_interface;
>  	unsigned int events = 0;
>  
> +	if (!indio_dev->info)
> +		return -ENODEV;
> +
>  	poll_wait(filep, &ev_int->wait, wait);
>  
>  	spin_lock_irq(&ev_int->wait.lock);
> @@ -96,6 +99,9 @@ static ssize_t iio_event_chrdev_read(struct file *filep,
>  	unsigned int copied;
>  	int ret;
>  
> +	if (!indio_dev->info)
> +		return -ENODEV;
> +
>  	if (count < sizeof(struct iio_event_data))
>  		return -EINVAL;
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux