gpt4 book ai didi

c - 在对文件调用 exec() 之前检测到挂载点没有设置 noexec?

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:29 24 4
gpt4 key购买 nike

我的程序对已写入用户指定目录的二进制文件调用 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)) {

有谁知道这样做的方法吗?

谢谢。

最佳答案

您可以使用 statvfs ()

struct statvfs st;
inr rc = statvfs("/mnt/foo", &st);
if (rc == -1)
error();
if (st.f_flag & ST_NOEXEC) {
//no exec flags was set
}

关于c - 在对文件调用 exec() 之前检测到挂载点没有设置 noexec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com