public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Hans J. Koch" <hjk@linutronix.de>
To: "Uwe Kleine-König" <Uwe.Kleine-Koenig@digi.com>
Cc: "Hans J. Koch" <hjk@linutronix.de>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] UIO: hold a reference to the device's owner while the device is open
Date: Thu, 10 Apr 2008 23:02:29 +0200	[thread overview]
Message-ID: <20080410210229.GF3193@local> (raw)
In-Reply-To: <1207831023-8583-2-git-send-email-Uwe.Kleine-Koenig@digi.com>

On Thu, Apr 10, 2008 at 02:37:00PM +0200, Uwe Kleine-König wrote:
> Otherwise the device might just disappear while /dev/uioX is being used
> which results in an Oops.

Hi Uwe,
thanks for this one, good catch! Looks fine to me. There are some minor issues, see
below.
And I'd like to hear Greg's opinion: Do you agree we can omit
try_module_get() in uio_mmap()?

Thanks,
Hans

> 
> Signed-off-by: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
> ---
>  drivers/uio/uio.c |   40 +++++++++++++++++++++++-----------------
>  1 files changed, 23 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
> index 1175908..005fc55 100644
> --- a/drivers/uio/uio.c
> +++ b/drivers/uio/uio.c
> @@ -301,25 +301,35 @@ static int uio_open(struct inode *inode, struct file *filep)
>  	if (!idev)
>  		return -ENODEV;
>  
> +	if (!try_module_get(idev->owner)) {
> +		ret = -ENODEV;
> +		goto err_module_get;
> +	}
> +
>  	listener = kmalloc(sizeof(*listener), GFP_KERNEL);
> -	if (!listener)
> -		return -ENOMEM;
> +	if (!listener) {
> +		ret = -ENOMEM;
> +		goto err_alloc_listener;
> +	}
>  
>  	listener->dev = idev;
>  	listener->event_count = atomic_read(&idev->event);
>  	filep->private_data = listener;
>  
>  	if (idev->info->open) {
> -		if (!try_module_get(idev->owner))
> -			return -ENODEV;
>  		ret = idev->info->open(idev->info, inode);
> -		module_put(idev->owner);
> -	}
> +		if (ret) {
> +			kfree(listener);
> +err_alloc_listener:
>  
> -	if (ret)
> -		kfree(listener);
> +			module_put(idev->owner);
> +err_module_get:
>  
> -	return ret;
> +			return ret;
> +		}
> +	}
> +
> +	return 0;
>  }

I really don't like these labels inside the if-block. I find it hard to
read. What about this:


if (idev->info->open) {
	ret = idev->info->open(idev->info, inode);
	if (ret)
		kfree(listener);
	return ret;
}

err_alloc_listener:
	module_put(idev->owner);
err_module_get:
	return ret;



The label err_module_get should probably be omitted because it's used only
once and has just one line of code. You could simply write "return ret"
instead of "goto err_module_get".

}


>  
>  static int uio_fasync(int fd, struct file *filep, int on)
> @@ -336,12 +346,11 @@ static int uio_release(struct inode *inode, struct file *filep)
>  	struct uio_listener *listener = filep->private_data;
>  	struct uio_device *idev = listener->dev;
>  
> -	if (idev->info->release) {
> -		if (!try_module_get(idev->owner))
> -			return -ENODEV;
> +	if (idev->info->release)
>  		ret = idev->info->release(idev->info, inode);
> -		module_put(idev->owner);
> -	}
> +
> +	module_put(idev->owner);
> +
>  	if (filep->f_flags & FASYNC)
>  		ret = uio_fasync(-1, filep, 0);
>  	kfree(listener);
> @@ -510,10 +519,7 @@ static int uio_mmap(struct file *filep, struct vm_area_struct *vma)
>  		return -EINVAL;
>  
>  	if (idev->info->mmap) {
> -		if (!try_module_get(idev->owner))
> -			return -ENODEV;
>  		ret = idev->info->mmap(idev->info, vma);
> -		module_put(idev->owner);
>  		return ret;
>  	}
>  
> -- 
> 1.5.4.5

  parent reply	other threads:[~2008-04-10 21:02 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-10 12:36 [PATCH 0/4] UIO: fixes, cleanups and a new driver Uwe Kleine-König
2008-04-10 12:37 ` [PATCH 1/4] UIO: hold a reference to the device's owner while the device is open Uwe Kleine-König
2008-04-10 12:37   ` [PATCH 2/4] UIO: use menuconfig Uwe Kleine-König
2008-04-10 12:37     ` [PATCH 3/4] UIO: wrap all uio drivers in "if UIO" and "endif" Uwe Kleine-König
2008-04-10 12:37       ` [PATCH 4/4] [RFC] UIO: generic platform driver Uwe Kleine-König
2008-04-10 19:54         ` Hans J. Koch
2008-04-10 20:08           ` Uwe Kleine-König
2008-04-10 21:17             ` Hans J. Koch
2008-04-11  1:34               ` Ben Nizette
2008-04-10 22:48         ` Hans J. Koch
2008-04-11  6:21           ` Uwe Kleine-König
2008-04-11  9:21             ` [PATCH 4/4 v2] " Uwe Kleine-König
2008-04-11 10:33               ` Hans J. Koch
2008-04-11 11:03                 ` Uwe Kleine-König
2008-04-11 11:17                   ` Hans J. Koch
2008-04-11 11:25                     ` Uwe Kleine-König
2008-04-12 13:16                       ` Russell King - ARM Linux
2008-04-14  7:48                         ` [PATCH] " Uwe Kleine-König
2008-04-14  9:37                           ` Russell King - ARM Linux
2008-04-14  9:54                             ` Uwe Kleine-König
2008-04-14 10:00                               ` Uwe Kleine-König
2008-04-14 10:17                               ` Russell King - ARM Linux
2008-04-14 11:20                                 ` Uwe Kleine-König
2008-04-14 11:37                                   ` Russell King - ARM Linux
2008-04-14 11:52                                     ` Hans J. Koch
2008-04-11 10:48               ` Uwe Kleine-König
2008-04-11 21:41                 ` Greg KH
2008-04-11 22:54                   ` Hans J. Koch
2008-04-11 23:06                     ` Greg KH
2008-04-11  9:24             ` [PATCH 4/4] " Hans J. Koch
2008-04-11 10:41               ` Uwe Kleine-König
2008-04-11 19:59                 ` Hans J. Koch
2008-04-10 19:45       ` [PATCH 3/4] UIO: wrap all uio drivers in "if UIO" and "endif" Hans J. Koch
2008-04-11 21:36         ` Greg KH
2008-04-10 19:39     ` [PATCH 2/4] UIO: use menuconfig Hans J. Koch
2008-04-11 21:36       ` Greg KH
2008-04-11 22:58         ` Hans J. Koch
2008-04-10 20:11   ` [PATCH 1/4] UIO: hold a reference to the device's owner while the device is open Uwe Kleine-König
2008-04-10 21:02   ` Hans J. Koch [this message]
2008-04-10 21:12     ` Greg KH
2008-04-10 21:23       ` Hans J. Koch
2008-04-11  6:50     ` Uwe Kleine-König
2008-04-11  8:44       ` Hans J. Koch
2008-04-11  9:07         ` [PATCH 1/4 v2] " Uwe Kleine-König
2008-04-11 11:39           ` Hans J. Koch
2008-04-22  9:47 ` [PATCH 0/3] UIO: cleanup and platform driver Uwe Kleine-König
2008-04-22  9:52   ` [PATCH 1/3] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Uwe Kleine-König
2008-04-22  9:52     ` [PATCH 2/3] provide a dummy implementation of the clk API Uwe Kleine-König
2008-04-22  9:52       ` [PATCH 3/3] UIO: generic platform driver Uwe Kleine-König
2008-04-22 10:26         ` Ben Nizette
2008-04-22 13:35           ` Hans J. Koch
2008-04-23  8:56         ` Uwe Kleine-König
2008-04-27 17:12           ` Hans J. Koch
2008-05-20  9:23             ` Uwe Kleine-König
2008-05-20  9:24               ` [PATCH] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Uwe Kleine-König
2008-05-20  9:24                 ` [PATCH] UIO: generic platform driver Uwe Kleine-König
2008-05-20 21:08                   ` Hans J. Koch
2008-05-26  5:58                     ` Uwe Kleine-König
2008-05-26  6:02                       ` Greg KH
2008-05-30  9:16                         ` Uwe Kleine-König
2008-05-30 16:35                           ` Greg KH
2008-06-03  7:21                             ` Uwe Kleine-König
2008-06-03  9:24                               ` Hans J. Koch
2008-05-20 21:12                 ` [PATCH] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Hans J. Koch
2008-04-22 13:39   ` [PATCH 0/3] UIO: cleanup and platform driver Hans J. Koch

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=20080410210229.GF3193@local \
    --to=hjk@linutronix.de \
    --cc=Uwe.Kleine-Koenig@digi.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox