summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorRobert Love <rml@novell.com>2005-07-25 21:12:19 +0200
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-26 22:37:22 +0200
commit5eb22cbcdb849886c2584389faff5afb56c23876 (patch)
tree4a0147ea3f2021091c0ce686dc10225ef0ac7d83 /fs
parent[PATCH] inotify: oops fix (diff)
downloadlinux-5eb22cbcdb849886c2584389faff5afb56c23876.tar.xz
linux-5eb22cbcdb849886c2584389faff5afb56c23876.zip
[PATCH] inotify: exit path cleanups
Handle error out paths better. Signed-off-by: Robert Love <rml@novell.com> Signed-off-by: John McCutchan <ttb@tentacle.dhs.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/inotify.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/fs/inotify.c b/fs/inotify.c
index b55d6e4a0911..d41c53c8dfd0 100644
--- a/fs/inotify.c
+++ b/fs/inotify.c
@@ -865,23 +865,21 @@ asmlinkage long sys_inotify_init(void)
filp = get_empty_filp();
if (!filp) {
- put_unused_fd(fd);
ret = -ENFILE;
- goto out;
+ goto out_put_fd;
}
user = get_uid(current->user);
-
if (unlikely(atomic_read(&user->inotify_devs) >=
inotify_max_user_instances)) {
ret = -EMFILE;
- goto out_err;
+ goto out_free_uid;
}
dev = kmalloc(sizeof(struct inotify_device), GFP_KERNEL);
if (unlikely(!dev)) {
ret = -ENOMEM;
- goto out_err;
+ goto out_free_uid;
}
filp->f_op = &inotify_fops;
@@ -908,11 +906,11 @@ asmlinkage long sys_inotify_init(void)
fd_install(fd, filp);
return fd;
-out_err:
- put_unused_fd (fd);
- put_filp (filp);
+out_free_uid:
free_uid(user);
-out:
+ put_filp(filp);
+out_put_fd:
+ put_unused_fd(fd);
return ret;
}
@@ -975,9 +973,9 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
list_add(&watch->i_list, &inode->inotify_watches);
ret = watch->wd;
out:
- path_release (&nd);
up(&dev->sem);
up(&inode->inotify_sem);
+ path_release(&nd);
fput_and_out:
fput_light(filp, fput_needed);
return ret;