aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Love <rml@novell.com>2005-07-25 15:10:08 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-26 16:37:21 -0400
commit783bc29bbc5d6625a4669d3eb1d989a8fb275d43 (patch)
tree100222921c788e68009ba1b2dccbeaba06b81e89
parent33ea2f52b8758ef62ae4a9d2f91821c47d999ee9 (diff)
[PATCH] inotify: oops fix
Bug fix: Ensure that the fd passed to inotify_add_watch() and inotify_rm_watch() belongs to inotify. 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>
-rw-r--r--fs/inotify.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/fs/inotify.c b/fs/inotify.c
index 807209f0bcda..b55d6e4a0911 100644
--- a/fs/inotify.c
+++ b/fs/inotify.c
@@ -929,6 +929,12 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
929 if (unlikely(!filp)) 929 if (unlikely(!filp))
930 return -EBADF; 930 return -EBADF;
931 931
932 /* verify that this is indeed an inotify instance */
933 if (unlikely(filp->f_op != &inotify_fops)) {
934 ret = -EINVAL;
935 goto fput_and_out;
936 }
937
932 ret = find_inode(path, &nd); 938 ret = find_inode(path, &nd);
933 if (unlikely(ret)) 939 if (unlikely(ret))
934 goto fput_and_out; 940 goto fput_and_out;
@@ -986,10 +992,18 @@ asmlinkage long sys_inotify_rm_watch(int fd, u32 wd)
986 filp = fget_light(fd, &fput_needed); 992 filp = fget_light(fd, &fput_needed);
987 if (unlikely(!filp)) 993 if (unlikely(!filp))
988 return -EBADF; 994 return -EBADF;
995
996 /* verify that this is indeed an inotify instance */
997 if (unlikely(filp->f_op != &inotify_fops)) {
998 ret = -EINVAL;
999 goto out;
1000 }
1001
989 dev = filp->private_data; 1002 dev = filp->private_data;
990 ret = inotify_ignore(dev, wd); 1003 ret = inotify_ignore(dev, wd);
991 fput_light(filp, fput_needed);
992 1004
1005out:
1006 fput_light(filp, fput_needed);
993 return ret; 1007 return ret;
994} 1008}
995 1009