【发布时间】:2019-04-11 19:30:34
【问题描述】:
我想知道 linux 内核命令行中这两个参数之间的区别:
- noexec=off
- nosmep
在这两种情况下,它都拒绝内核执行用户空间内存中的代码。 但我看不出它们之间有什么区别。
dmesg 中的错误消息不同,但行为似乎相同。
谢谢
【问题讨论】:
标签: linux-kernel x86
我想知道 linux 内核命令行中这两个参数之间的区别:
在这两种情况下,它都拒绝内核执行用户空间内存中的代码。 但我看不出它们之间有什么区别。
dmesg 中的错误消息不同,但行为似乎相同。
谢谢
【问题讨论】:
标签: linux-kernel x86
noexec 参数控制内核是否可以使用分页结构的 XD 标志(也称为 NX 标志)来标记不应执行的页面。另一方面,nosmep 参数指定是否启用 SMEP。请注意,nosmep 仅在内核版本和处理器都支持 SMEP 时有效(请参阅:How can i enable/disable kernel kaslr, smep and smap)。另外,XD 仅在内核运行在 64 位或使用 36 位分页且IA32_EFER.NXE 设置为 1 时才有效。
XD 和 SMEP 标志确定是否可以获取给定内存位置的指令。 SMEP 覆盖 XD,这意味着如果设置了 SMEP,则无论 XD 标志如何,都不允许supervisor-mode 代码从用户页面获取指令(用于执行)。否则,如果不支持或禁用 SMEP,则在以下情况下不允许取指:
在任何这些情况下,都会发生页面错误异常 (#PF)。
【讨论】: