On Fri, 2005-04-22 at 22:13 +0100, Al Viro wrote:
> Or it would, if remove_watch() had been called only once. In the scenario
> above that will not be true.
Thanks.
Robert Love
Double check that we don't race.
Signed-off-by: Robert Love <[email protected]>
fs/inotify.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff -urN linux-2.6.12-rc3-inotify/fs/inotify.c linux/fs/inotify.c
--- linux-2.6.12-rc3-inotify/fs/inotify.c 2005-04-22 19:20:14.000000000 -0400
+++ linux/fs/inotify.c 2005-04-22 19:25:44.000000000 -0400
@@ -861,12 +861,17 @@
return -EINVAL;
}
get_inotify_watch(watch);
+ inode = watch->inode;
up(&dev->sem);
- inode = watch->inode;
down(&inode->inotify_sem);
down(&dev->sem);
- remove_watch(watch, dev);
+
+ /* make sure we did not race */
+ watch = idr_find(&dev->idr, wd);
+ if (likely(watch))
+ remove_watch(watch, dev);
+
up(&dev->sem);
up(&inode->inotify_sem);
put_inotify_watch(watch);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]