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

init devmem_is_allowed

发布时间:2026/9/27 23:03:11 来源:云帆数科 栏目:资讯中心
init devmem_is_allowed
/* * devmem_is_allowed() 检查对某个地址的 /dev/mem 访问是否有效。 * 其参数是一个物理页号。 * * 在 x86 上必须允许访问 RAM 的第一个兆字节因为该区域 * 传统上包含 X、dosemu 以及类似应用程序所使用的 BIOS 代码和 * 数据区域。由于它们会映射整个内存范围因此必须允许映射 * 整个范围但那些本应被禁止的区域则被标记为零填充而不是 * 直接拒绝。同样也必须允许访问非内核 RAM 区域这些区域 * 包含 PCI MMIO 资源以及可能的 BIOS/ACPI 数据区域。 */devmem_is_allowed()是 Linux 内核中用于控制/dev/mem设备访问权限的核心函数。它决定了一个给定的物理页帧pagenr是否允许通过/dev/mem被用户空间直接访问。核心作用安全过滤/dev/mem是一个危险的设备——它允许用户空间直接读写物理内存。如果没有任何限制恶意程序可以轻易破坏内核或窃取敏感数据。devmem_is_allowed()就是内核设置的“安检门”根据页帧的类型和位置返回不同的许可级别。返回值语义这个函数的返回值有明确的含义返回值含义1完全允许用户空间可以直接读写该页。0完全禁止用户空间访问该页将失败返回-EPERM。2特殊允许允许访问但该页会被显示为全零零页实际内容被隐藏。逻辑解析函数的判断分为两个阶段第一阶段System RAM 检查if (region_intersects(PFN_PHYS(pagenr), PAGE_SIZE, IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE) ! REGION_DISJOINT) { if (pagenr 256) return 2; // 低1MB的RAM区域显示为零页 return 0; // 其他RAM区域完全禁止 }通过region_intersects()检查该页是否属于System RAM区域。如果是 System RAM则禁止直接访问因为 RAM 中可能包含内核数据、用户密码等敏感信息。但有一个例外低 1MBpagenr 256的 RAM 区域返回2表示允许访问但内容被替换为零页。这是为了兼容一些依赖低端内存的旧程序同时又不泄露真实数据。第二阶段ioremap 独占检查if (iomem_is_exclusive(pagenr PAGE_SHIFT)) { if (pagenr 256) return 1; // 低1MB绕过ioremap限制 return 0; // 其他禁止 }如果该页不属于 System RAM再检查它是否被ioremap标记为独占IORESOURCE_EXCLUSIVE。如果被独占通常禁止访问但低 1MB 仍然允许返回1。这是因为低 1MB 是传统 ISA 设备的保留区域很多调试工具需要访问它。如果既不是 System RAM也不是独占的 ioremap 区域则允许访问返回1例如 PCI BAR 映射的 MMIO 区域。与CONFIG_STRICT_DEVMEM的关系这个函数的行为受CONFIG_STRICT_DEVMEM内核配置选项控制启用STRICT_DEVMEM默认System RAM 被严格保护devmem_is_allowed()会阻止对 RAM 的访问。禁用STRICT_DEVMEM函数会变得宽松允许访问更多区域。代码注释中提到的“System RAM is considered a restricted resource under CONFIG_STRICT_DEVMEM”正是指这一点。唯一的调用点range_is_allowed()devmem_is_allowed()的调用点非常集中它只在一个地方被调用drivers/char/mem.c文件中的range_is_allowed()函数。当对/dev/mem设备进行read()、write()或mmap()操作时内核会调用range_is_allowed()来检查你试图访问的物理地址范围是否合法。它的调用逻辑大致如下static inline int range_is_allowed(unsigned long pfn, unsigned long nr) { u64 from ((u64)pfn) PAGE_SHIFT; u64 to from nr; u64 cursor from; while (cursor to) { if (!devmem_is_allowed(pfn)) { // --- 在这里被调用 printk(KERN_INFO Program %s tried to access /dev/mem between %Lx-%Lx.\n, current-comm, from, to); return 0; } cursor PAGE_SIZE; pfn; } return 1; }这个函数会逐页遍历你请求的物理地址范围对每一页调用devmem_is_allowed()进行检查。只要有一页不被允许整个访问请求就会被拒绝并在内核日志中打印一条警告信息包含发起访问的程序名和地址范围。与CONFIG_STRICT_DEVMEM的关系这个调用路径是CONFIG_STRICT_DEVMEM内核配置选项生效的关键机制。当该选项被启用时range_is_allowed()会通过devmem_is_allowed()来严格过滤对 System RAM 和独占 I/O 内存的访问如果该选项未启用range_is_allowed()可能会直接返回允许不进行这些检查。所以devmem_is_allowed()是/dev/mem设备驱动内部的一个“安检员”它的所有决策都发生在用户空间试图通过这个设备直接触碰物理内存的瞬间。设计意图这个函数体现了内核在兼容性与安全性之间的精细权衡低 1MB 的特殊处理是为了兼容旧硬件和调试工具而对 System RAM 的严格保护则是为了防止敏感数据泄露和系统被破坏。

相关推荐

山西靠谱的地质保障系统评估服务商测评排名 恒山科技值得选
山西靠谱的地质保障系统评估服务商测评排名 恒山科技值得选

地质保障系统是煤矿智能化建设的核心前提煤矿生产的核心前提之一,是清晰掌握井下地质条件的真实状态。传统煤矿开采中,地质信息多依赖纸质图纸、人工测量,不仅更新滞后,还常出现采掘进度与地质条件脱节的问题,轻则影响… · 2026/9/27 23:03:11

天津砾汀健身房跑步机限时 40 分钟合理吗?关键是有人候补才启动
天津砾汀健身房跑步机限时 40 分钟合理吗?关键是有人候补才启动

天津河西区宾水道一带的砾汀健身房有 12 台跑步机。它的晚间使用规则是:工作日 18:30—21:00,电子候补屏显示有人排队时,月卡会员一次最多使用 40 分钟;到时间要先下机,间隔 10 分钟后才能重新取号。屏幕上没人候补时&… · 2026/9/27 23:03:11

微信 Callkit 扩大测试范围,DeepSeek-R1 对标 o1:RTE 开发者日报
微信 Callkit 扩大测试范围,DeepSeek-R1 对标 o1:RTE 开发者日报

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

3个真相解析rediswordpress内存对建站报价影响
3个真相解析rediswordpress内存对建站报价影响

3个真相解析rediswordpress内存对建站报价影响 自己不会代码想做网站,最头疼的就是看到“Redis”、“WordPress”、“内存”这些词就晕。很多老板拿着预算表问建站报价,结果发现不同公司给出的价格差距巨大,有的几千元,有的… · 2026/9/27 23:34:33

美团三合一系统源码带商家系统搭建实战与避坑指南
美团三合一系统源码带商家系统搭建实战与避坑指南

简介:一套可二次开发的美团三合一系统源码,面向餐饮、零售等中小商家及开发者,提供在线接单、商家后台、菜单库存管理、数据分析等完整功能,并配套视频搭建与文字搭建教程,适合无技术背景用户快速上线,也便… · 2026/9/27 23:34:33

基于 SSM + MyBatis-Plus + MySQL 的丰泽助农专区平台设计与实现
基于 SSM + MyBatis-Plus + MySQL 的丰泽助农专区平台设计与实现

基于 SSM MyBatis-Plus MySQL 的丰泽助农专区平台设计与实现 一、前言 助农这件事,难点往往不在"种得好",而在"卖得稳"。产地不缺好货,缺的是一个把农户、合作社和消费者直接连起来、还能持续运营的线上专区。本文分… · 2026/9/27 23:34:33

RSuite DatePicker 中文国际化(zh-CN)配置全解析:locale 本地化方案与源码实现
RSuite DatePicker 中文国际化(zh-CN)配置全解析:locale 本地化方案与源码实现

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 导读 本文将围绕 RSuite 的 DatePicker 组件国际化配置展开,以中文(zh-CN&… · 2026/9/27 23:34:27

建立一个网站多少钱?避坑指南与预算拆解
建立一个网站多少钱?避坑指南与预算拆解

建立一个网站多少钱?避坑指南与预算拆解 域名买错了,服务器选小了,SSL证书忘了续,这三样搞不懂,你的网站上线就是灾难现场。很多老板问【建立一个网站多少钱】,其实这钱不是花在“建”上,是花在这些【注意事项】里。别被“99元建站”忽悠了,也别… · 2026/9/27 23:34:27

Amethyst Pong 教程(四):让球移动与反弹——ECS 组件、System 与延迟生成的完整实现
Amethyst Pong 教程(四):让球移动与反弹——ECS 组件、System 与延迟生成的完整实现

【免费下载链接】amethyst Data-oriented and data-driven game engine written in Rust 项目地址: https://gitcode.com/gh_mirrors/ame/amethyst 点击查看 免费下载 本文是 Amethyst(Rust 数据驱动游戏引擎)Pong 教程系列的第四篇&#xf… · 2026/9/27 23:34:21

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

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

企业微信二维码