【问题标题】:How to find out whether CONFIG_FANOTIFY_ACCESS_PERMISSIONS is enabled?如何确定是否启用了 CONFIG_FANOTIFY_ACCESS_PERMISSIONS?
【发布时间】:2016-01-13 12:15:33
【问题描述】:

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

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

【问题讨论】:

    标签: c linux fanotify


    【解决方案1】:

    当FAN_ALL_PERM_EVENTS 被传递但CONFIG_FANOTIFY_ACCESS_PERMISSIONS 被禁用时,fanotify_mark() 似乎返回EINVAL。

    请参阅内核源代码中的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;
    

    【讨论】:

    • 很好的发现。那将是例如fanotify_mark(-1, FAN_MARK_FLUSH, FAN_ALL_PERM_EVENTS, -1, NULL) C 库调用产生 -1 和 errno == ENOSYS 如果没有 fanotify 支持,errno == EINVAL 如果没有访问权限事件支持,errno == EBADF 如果有访问权限支持的 fanotify 支持可用。但是,你能依赖这种无证行为吗?未来有可能改变吗?我不知道;我自己可能不会相信这一点。不过,可能值得在 linux-fsdevel 邮件列表中查询。
    • @NominalAnimal,是的,完全没有记录,但我看不出有什么理由可以在将来删除此检查;检查是否支持用户的请求是合乎逻辑的。
    • 实际上,我更担心支票会在某个时候重新排序。可以通过多种方式重新排序各种检查in that function,从而禁用检测。例如,如果在掩码检查之前检查了文件描述符。
    • 天啊!我是个白痴。如果您确保 fanotify 标记在其他方面是正确和正确的——而不是在我上面的评论中使用愚蠢的 will-always-fail 检查——那么就没有风险,因为这样一个标记失败的唯一原因是缺乏支持。简而言之:只需确保 fanotify_mark() 调用正在执行有效操作,至少有一些 FAN_ALL_PERM_EVENTS 在掩码中。
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多