3

我想使用,fanotify(7)我遇到的问题是,在某些内核CONFIG_FANOTIFY_ACCESS_PERMISSIONS上不起作用,尽管CONFIG_FANOTIFY已配置。

至少我想报告这种情况。

现在在 Debian 和 Ubuntu 上,我可以使用等效的grep CONFIG_FANOTIFY_ACCESS_PERMISSIONS /boot/config-$(uname -r)来验证该功能是否可用。在其他一些系统上,我可以使用相当于zgrep CONFIG_FANOTIFY_ACCESS_PERMISSIONS /proc/config.gz,但是这两种方法可能没有涵盖更多的系统。

有没有办法找出任何fanotify(7)函数中确定在当前运行的内核上是否可以使用 fanotify 权限处理?

我正在考虑一种类似于未实现ENOSYS时返回的方法( ),但在文档中找不到类似的东西。fanotify_mark()fanotify_mark(2)

4

1 回答 1

3

似乎在通过但被禁用时fanotify_mark()返回。EINVALFAN_ALL_PERM_EVENTSCONFIG_FANOTIFY_ACCESS_PERMISSIONS

参见fs/notify/fanotify/fanotify_user.c内核源代码:

SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
                              __u64, mask, int, dfd,
                              const char  __user *, pathname)
{
...

#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
        if (mask & ~(FAN_ALL_EVENTS | FAN_ALL_PERM_EVENTS | FAN_EVENT_ON_CHILD))
#else
        if (mask & ~(FAN_ALL_EVENTS | FAN_EVENT_ON_CHILD))
#endif
                return -EINVAL;
于 2016-01-13T12:30:19.933 回答