audit: incorrect ref counting in audit tree tag_chunk
tag_chunk has bad exit paths in which the inotify ref counting is wrong. At the top of the function we found &old_watch using inotify_find_watch(). inotify_find_watch takes a reference to the watch. This is never dropped on an error path. Signed-off-by: Eric Paris <eparis@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
6d208da89a
commit
318b6d3d7d
1 changed files with 2 additions and 0 deletions
|
@ -385,6 +385,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
|
|||
mutex_lock(&inode->inotify_mutex);
|
||||
if (inotify_clone_watch(&old->watch, &chunk->watch) < 0) {
|
||||
mutex_unlock(&inode->inotify_mutex);
|
||||
put_inotify_watch(&old->watch);
|
||||
free_chunk(chunk);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
@ -394,6 +395,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
|
|||
chunk->dead = 1;
|
||||
inotify_evict_watch(&chunk->watch);
|
||||
mutex_unlock(&inode->inotify_mutex);
|
||||
put_inotify_watch(&old->watch);
|
||||
put_inotify_watch(&chunk->watch);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue