我的程序在已写入用户指定目录的二进制文件上调用 exec()。如果该目录位于使用“noexec”挂载的树中,则 exec() 将失败并显示 EACCES。
我不想让 exec() 失败,而是希望能够确定一个目录是否使用 noexec 挂载,但 fcntl()、stat() 或 mount() 都没有返回此信息(通过阅读手册页)。查看 exec 系统调用的内核源代码,看起来此信息存储在 inode 的元数据中,我没有看到任何系统调用返回此信息。
673 struct nameidata nd;
(..)
677 err = path_lookup_open(AT_FDCWD, name, LOOKUP_FOLLOW, &nd, FMODE_READ|FMODE_EXEC);
678 file = ERR_PTR(err);
(..)
682 file = ERR_PTR(-EACCES);
683 if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
684 S_ISREG(inode->i_mode)) {
有谁知道这样做的方法?
谢谢。