如何确定是否启用了CONFIG_FANOTIFY_ACCESS_PERMISSIONS?

时间:2016-01-13 12:15:34

标签: c linux fanotify

我想使用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权限处理?

当我没有实现ENOSYSfanotify_mark(2))时,我正在考虑类似于返回的fanotify_mark()的方法,但在文档中找不到类似的内容。

1 个答案:

答案 0 :(得分:3)

传递fanotify_mark()EINVAL被禁用时FAN_ALL_PERM_EVENTS似乎会返回CONFIG_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;