From 6f12125be16d4f4f9a3f1969d4a30c8a0fb95aef Mon Sep 17 00:00:00 2001 From: Jonathan Corbet Date: Thu, 15 May 2008 10:39:37 -0600 Subject: [PATCH] --- yaml --- r: 100279 b: refs/heads/master c: fbc8a81d66bbbce3f0b4d5752f8bc8bb3c1fc439 h: refs/heads/master i: 100277: 726fd86c3886cf632ed7318217827b90a5f6eacf 100275: 3f58ea07551e7090ed5f3079d9b9d375f0e3f6b0 100271: 42ae260b14a59bb5d26dc303c6ef96dfcbfd487f v: v3 --- [refs] | 2 +- trunk/drivers/uio/uio.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 52e2eef16d4a..0368941b55b5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2edbf8537edc62c9b0ef75e7025d01e8b6a48707 +refs/heads/master: fbc8a81d66bbbce3f0b4d5752f8bc8bb3c1fc439 diff --git a/trunk/drivers/uio/uio.c b/trunk/drivers/uio/uio.c index 55cc7b80422a..1a0415e77a30 100644 --- a/trunk/drivers/uio/uio.c +++ b/trunk/drivers/uio/uio.c @@ -297,12 +297,17 @@ static int uio_open(struct inode *inode, struct file *filep) struct uio_listener *listener; int ret = 0; + lock_kernel(); idev = idr_find(&uio_idr, iminor(inode)); - if (!idev) - return -ENODEV; + if (!idev) { + ret = -ENODEV; + goto out; + } - if (!try_module_get(idev->owner)) - return -ENODEV; + if (!try_module_get(idev->owner)) { + ret = -ENODEV; + goto out; + } listener = kmalloc(sizeof(*listener), GFP_KERNEL); if (!listener) { @@ -319,7 +324,7 @@ static int uio_open(struct inode *inode, struct file *filep) if (ret) goto err_infoopen; } - + unlock_kernel(); return 0; err_infoopen: @@ -329,6 +334,8 @@ static int uio_open(struct inode *inode, struct file *filep) module_put(idev->owner); +out: + unlock_kernel(); return ret; }