Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 220d14df authored by Eric Paris's avatar Eric Paris
Browse files

Audit: only set group mask when something is being watched



Currently the audit watch group always sets a mask equal to all events it
might care about.  We instead should only set the group mask if we are
actually watching inodes.  This should be a perf win when audit watches are
compiled in.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent ffab8340
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -167,6 +167,8 @@ static struct audit_parent *audit_init_parent(struct nameidata *ndp)
		return ERR_PTR(ret);
		return ERR_PTR(ret);
	}
	}


	fsnotify_recalc_group_mask(audit_watch_group);

	return parent;
	return parent;
}
}


@@ -353,6 +355,9 @@ static void audit_remove_parent_watches(struct audit_parent *parent)
	mutex_unlock(&audit_filter_mutex);
	mutex_unlock(&audit_filter_mutex);


	fsnotify_destroy_mark_by_entry(&parent->mark);
	fsnotify_destroy_mark_by_entry(&parent->mark);

	fsnotify_recalc_group_mask(audit_watch_group);

}
}


/* Get path information necessary for adding watches. */
/* Get path information necessary for adding watches. */
@@ -503,6 +508,9 @@ void audit_remove_watch_rule(struct audit_krule *krule)
			audit_put_parent(parent);
			audit_put_parent(parent);
		}
		}
	}
	}

	fsnotify_recalc_group_mask(audit_watch_group);

}
}


static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,
static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,
@@ -577,8 +585,7 @@ static const struct fsnotify_ops audit_watch_fsnotify_ops = {


static int __init audit_watch_init(void)
static int __init audit_watch_init(void)
{
{
	audit_watch_group = fsnotify_alloc_group(AUDIT_FS_WATCH,
	audit_watch_group = fsnotify_alloc_group(0, &audit_watch_fsnotify_ops);
						 &audit_watch_fsnotify_ops);
	if (IS_ERR(audit_watch_group)) {
	if (IS_ERR(audit_watch_group)) {
		audit_watch_group = NULL;
		audit_watch_group = NULL;
		audit_panic("cannot create audit fsnotify group");
		audit_panic("cannot create audit fsnotify group");