|
@@ -373,15 +373,17 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
|
|
|
for (n = 0; n < old->count; n++) {
|
|
|
if (old->owners[n].owner == tree) {
|
|
|
spin_unlock(&hash_lock);
|
|
|
- put_inotify_watch(watch);
|
|
|
+ put_inotify_watch(&old->watch);
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
spin_unlock(&hash_lock);
|
|
|
|
|
|
chunk = alloc_chunk(old->count + 1);
|
|
|
- if (!chunk)
|
|
|
+ if (!chunk) {
|
|
|
+ put_inotify_watch(&old->watch);
|
|
|
return -ENOMEM;
|
|
|
+ }
|
|
|
|
|
|
mutex_lock(&inode->inotify_mutex);
|
|
|
if (inotify_clone_watch(&old->watch, &chunk->watch) < 0) {
|
|
@@ -425,7 +427,8 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
|
|
|
spin_unlock(&hash_lock);
|
|
|
inotify_evict_watch(&old->watch);
|
|
|
mutex_unlock(&inode->inotify_mutex);
|
|
|
- put_inotify_watch(&old->watch);
|
|
|
+ put_inotify_watch(&old->watch); /* pair to inotify_find_watch */
|
|
|
+ put_inotify_watch(&old->watch); /* and kill it */
|
|
|
return 0;
|
|
|
}
|
|
|
|