mprotect PROT_EXEC 在 noexec 分区上

mprotect PROT_EXEC on noexec partition

我尝试了 mmap-ing(更具体地说,dlopen 在 mmap 上失败)一个来自磁盘分区的文件,该文件使用 noexec 标志挂载,结果是

failed to map segment from shared object

一旦文件被映射到内存,内核如何知道它是否是一个 noexec 分区。我在内核源代码中找不到检查此条件的代码。

我正在使用:Linux 版本 5.7.11-1-默认 (geeko@buildhost) (gcc 版本 10.1.1 20200625 [修订版 c91e43e9363bd119a695d64505f96539fa451bf2] (SUSE Linux), GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.34.0.20200325-1) #1 SMP Wed Jul 29 09:32:21 UTC 2020 (5015994)

一个mmap()请求可以导致有条件地调用path_noexec()的例程do_mmap()PROT_EXEC 可以根据挂载标志启用或跳过 MNT_NOEXEC