首页/新闻资讯/正文详情

init x86_has_pat_wp

发布时间:2026/9/25 4:28:48 来源:云帆数科 栏目:资讯中心
init x86_has_pat_wp
x86_has_pat_wp()是 Linux 内核 x86 架构中用于检测当前 CPU 是否支持通过 PATPage Attribute Table实现 Write-ProtectWP缓存模式的辅助函数。核心作用这个函数要回答一个关键问题我们能否用 PAT 机制来标记一个页面为“写保护”WP缓存类型这个能力对于实现CONFIG_STRICT_KERNEL_RWX和CONFIG_STRICT_MODULE_RWX等安全特性至关重要——它允许内核将只读的代码和数据页真正地在硬件层面标记为不可写即使是通过内核自身直接映射的地址访问。代码逻辑解析bool x86_has_pat_wp(void) { uint16_t prot __cachemode2pte_tbl[_PAGE_CACHE_MODE_WP]; return __pte2cachemode_tbl[__pte2cm_idx(prot)] _PAGE_CACHE_MODE_WP; }这两行代码实现了一个“编码 → 解码”的往返验证正向转换从__cachemode2pte_tbl表中取出_PAGE_CACHE_MODE_WP对应的 PTE 保护位prot。逆向验证通过__pte2cm_idx(prot)将 PTE 位转换为__pte2cachemode_tbl表的索引再查表得到解码后的缓存模式。比较判断如果解码结果等于_PAGE_CACHE_MODE_WP说明这个 CPU 的 PAT 表确实支持 WP 模式返回true否则返回false。背景PAT 与 WP 缓存模式x86 的 PATPage Attribute Table允许通过页表项中的 PCD、PWT 和 PAT 三个位组合定义 8 种不同的内存缓存类型。其中WPWrite-Protect模式的行为是读操作正常缓存写操作会穿透缓存直接写入内存。这个特性被内核用来实现“只读”映射的硬件级保护。然而并非所有 x86 CPU 都支持 PAT 的 WP 模式。如果 CPU 不支持那么将_PAGE_CACHE_MODE_WP编码到 PTE 中解码回来可能得到其他缓存模式如UC或WT导致页面的实际行为与预期不符。x86_has_pat_wp()正是用来在启动时探测这个能力的。调用场景这个函数通常在pat_init()或相关的初始化代码中被调用。如果返回false内核会避免使用 WP 模式来标记只读页面转而依赖传统的_PAGE_RW位清除来提供写保护。这确保了在不同代际的 x86 硬件上内核的只读保护机制都能正确工作。

相关推荐

Delphi 13.1集成DevExpress VCL 25.2.7:从解压到组件面板的完整指南
Delphi 13.1集成DevExpress VCL 25.2.7:从解压到组件面板的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:28:48

WCH DAP-LINK驱动安装与Keil配置全指南:从未知设备到顺利调试
WCH DAP-LINK驱动安装与Keil配置全指南:从未知设备到顺利调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:28:48

math PFN_UP
math PFN_UP

PFN_UP 是 PFN_DOWN 的配套宏,用于将物理地址向上取整转换为页帧号(PFN)。定义在 include/linux/pfn.h 中。定义与原理#define PFN_UP(x) (((x) PAGE_SIZE - 1) >> PAGE_SHIFT)它的核心逻辑是先将地址加上 PAGE_SIZE - 1,再… · 2026/9/25 4:28:41

ENVI 5.3安装教程:从环境检查到许可配置的完整实操指南
ENVI 5.3安装教程:从环境检查到许可配置的完整实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 5:07:55

Atlas 300V 24G推理卡实战:从环境搭建到YOLO模型部署全攻略
Atlas 300V 24G推理卡实战:从环境搭建到YOLO模型部署全攻略

去年折腾完一摊昇腾的板卡之后,身边好几个做安防和流向识别的朋友问我同一句话:“Atlas 300V 24G 到底是不是块运算加速卡?”我一开始也愣了一下,因为这个名字听着像是显卡,包装盒上的“300V”又容易让人往供电电压上联… · 2026/9/25 5:07:55

libnpmorg 深度解析:npm Organization 成员关系的编程式管理 API(set / rm / ls / ls.stream)
libnpmorg 深度解析:npm Organization 成员关系的编程式管理 API(set / rm / ls / ls.stream)

开发工具包管理器CLI 【免费下载链接】cli the package manager for JavaScript 项目地址: https://gitcode.com/gh_mirrors/cli4/cli 点击查看 免费下载 libnpmorg 是 npm cli 仓库中的一个工作区(workspace)包,为开发者提供了一… · 2026/9/25 5:07:55

使用 AWS SDK for Java 2.x 操作 CloudFormation:栈生命周期管理完整实战
使用 AWS SDK for Java 2.x 操作 CloudFormation:栈生命周期管理完整实战

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/25 5:07:55

Pyro 中的摊销隐狄利克雷分配(Amortized LDA):利用离散枚举边缘化词-主题指派变量
Pyro 中的摊销隐狄利克雷分配(Amortized LDA):利用离散枚举边缘化词-主题指派变量

人工智能机器学习深度学习概率编程 【免费下载链接】pyro Deep universal probabilistic programming with Python and PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pyro 点击查看 免费下载 导读 本文基于 Pyro 官方教程文档 Example: Amortized Latent… · 2026/9/25 5:07:54

linuxkit 中 ttrpc 轻量级 RPC 协议详解:消息帧结构、标志位与流状态机
linuxkit 中 ttrpc 轻量级 RPC 协议详解:消息帧结构、标志位与流状态机

操作系统云原生容器运行时 【免费下载链接】linuxkit A toolkit for building secure, portable and lean operating systems for containers 项目地址: https://gitcode.com/gh_mirrors/li/linuxkit 点击查看 免费下载 本文以 linuxkit 仓库中 init 包 vendor 的 … · 2026/9/25 5:07:48

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码