diff options
author | Robert Love <rml@novell.com> | 2005-07-25 15:10:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-26 16:37:21 -0400 |
commit | 783bc29bbc5d6625a4669d3eb1d989a8fb275d43 (patch) | |
tree | 100222921c788e68009ba1b2dccbeaba06b81e89 | |
parent | 33ea2f52b8758ef62ae4a9d2f91821c47d999ee9 (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.c | 16 |
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 | ||
1005 | out: | ||
1006 | fput_light(filp, fput_needed); | ||
993 | return ret; | 1007 | return ret; |
994 | } | 1008 | } |
995 | 1009 | ||