Skip to content

Commit

Permalink
audit: eliminate unnecessary extra layer of watch references
Browse files Browse the repository at this point in the history
The audit watch count was imbalanced, adding an unnecessary layer of watch
references.  Only add the second reference when it is added to a parent.

Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
Signed-off-by: Paul Moore <pmoore@redhat.com>
  • Loading branch information
rgbriggs authored and pcmoore committed Aug 4, 2015
1 parent 0b08c5e commit f8259b2
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 16 deletions.
5 changes: 2 additions & 3 deletions kernel/audit_watch.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@ int audit_to_watch(struct audit_krule *krule, char *path, int len, u32 op)
if (IS_ERR(watch))
return PTR_ERR(watch);

audit_get_watch(watch);
krule->watch = watch;

return 0;
Expand Down Expand Up @@ -387,8 +386,7 @@ static void audit_add_to_parent(struct audit_krule *krule,

watch_found = 1;

/* put krule's and initial refs to temporary watch */
audit_put_watch(watch);
/* put krule's ref to temporary watch */
audit_put_watch(watch);

audit_get_watch(w);
Expand All @@ -400,6 +398,7 @@ static void audit_add_to_parent(struct audit_krule *krule,
audit_get_parent(parent);
watch->parent = parent;

audit_get_watch(watch);
list_add(&watch->wlist, &parent->watches);
}
list_add(&krule->rlist, &watch->rules);
Expand Down
16 changes: 3 additions & 13 deletions kernel/auditfilter.c
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,6 @@ static struct audit_entry *audit_data_to_entry(struct audit_rule_data *data,
return entry;

exit_free:
if (entry->rule.watch)
audit_put_watch(entry->rule.watch); /* matches initial get */
if (entry->rule.tree)
audit_put_tree(entry->rule.tree); /* that's the temporary one */
audit_free_rule(entry);
Expand Down Expand Up @@ -881,7 +879,7 @@ static inline int audit_add_rule(struct audit_entry *entry)
/* normally audit_add_tree_rule() will free it on failure */
if (tree)
audit_put_tree(tree);
goto error;
return err;
}

if (watch) {
Expand All @@ -895,14 +893,14 @@ static inline int audit_add_rule(struct audit_entry *entry)
*/
if (tree)
audit_put_tree(tree);
goto error;
return err;
}
}
if (tree) {
err = audit_add_tree_rule(&entry->rule);
if (err) {
mutex_unlock(&audit_filter_mutex);
goto error;
return err;
}
}

Expand Down Expand Up @@ -933,19 +931,13 @@ static inline int audit_add_rule(struct audit_entry *entry)
#endif
mutex_unlock(&audit_filter_mutex);

return 0;

error:
if (watch)
audit_put_watch(watch); /* tmp watch, matches initial get */
return err;
}

/* Remove an existing rule from filterlist. */
static inline int audit_del_rule(struct audit_entry *entry)
{
struct audit_entry *e;
struct audit_watch *watch = entry->rule.watch;
struct audit_tree *tree = entry->rule.tree;
struct list_head *list;
int ret = 0;
Expand Down Expand Up @@ -986,8 +978,6 @@ static inline int audit_del_rule(struct audit_entry *entry)
mutex_unlock(&audit_filter_mutex);

out:
if (watch)
audit_put_watch(watch); /* match initial get */
if (tree)
audit_put_tree(tree); /* that's the temporary one */

Expand Down

0 comments on commit f8259b2

Please sign in to comment.