On Sun 23-08-20 16:04:39, Amir Goldstein wrote: > > Any further help is appreciated. > > > > A patch along those line (fill in the missing pieces) looks useful to me. > It could serve a use case where applications are using fanotify filesystem > mark, but developer would like to limit those application's scope inside > "system containers". > > Perhaps an even more useful API would be FAN_FILTER_MOUNT_NS. > FAN_FILTER_PID_NS effectively means that kernel will drop events > that are expected to report pid 0. > FAN_FILTER_MOUNT_NS would mean that kernel will drop events that > are expected to report an fd, whose /proc/<pid>/fd/<fd> symlink cannot > be resolved (it shows "/") because the file's mount is outside the scope > of the listener's mount namespace. > > The burden of proof that this will be useful is still on you ;-) I was thinking that we could add a BPF hook to fanotify_handle_event() (similar to what's happening in packet filtering code) and you could attach BPF programs to this hook to do filtering of events. That way we don't have to introduce new group flags for various filtering options. The question is whether eBPF is strong enough so that filters useful for fanotify users could be implemented with it but this particular check seems implementable. Honza > --- a/fs/notify/fanotify/fanotify.c > +++ b/fs/notify/fanotify/fanotify.c > @@ -685,6 +685,11 @@ static int fanotify_handle_event(struct > fsnotify_group *group, u32 mask, > > pr_debug("%s: group=%p mask=%x\n", __func__, group, mask); > > + /* Interested only in events from group's pid ns */ > + if (FAN_GROUP_FLAG(group, FAN_FILTER_PID_NS) && > + !pid_nr_ns(task_pid(current), group->fanotify_data.pid_ns)) > + return 0; > + > if (fanotify_is_perm_event(mask)) { > /* > * fsnotify_prepare_user_wait() fails if we race with mark -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR