目录

  流程设计

invalid 命令

内核态invalid

内核态invalid,用户态mmap物理地址

PAN机制

  PAN机制历程   硬件支持     

ARMv8.1-PAN 特性

Linux 内核的适配

 软件模拟 PAN(SW PAN)

背景

Linux 的实现

总结


   

前述刷新cache的流程也同样可以用于invalid 的操作。

  流程设计

 1)写程序写数据到内存。

 2) 读程序读数据,可能从cache读到老数据,这里invalid

invalid 命令

参考clean的操作,我们采用对应的指令。

DC IVAC, Data or unified Cache line Invalidate by VA to PoC
于是我们设计类似的接口

	 for (i = 0; i < gen_test_size; i = i + 64){temp_addr=(unsigned char *)((unsigned char *)test_virt_addr_r+i);__asm volatile("dc ivac,%0"::"r"(temp_addr));}

但实际运行的时候,报 指令无权限。也就是 用户态不能执行这个指令

内核态invalid

内核接口,直接调用同样的指令invalid 操作

// 失效指定范围的 D-Cache
static void invalidate_dcache_range(unsigned long start, unsigned long end) {for (; start < end; start += cache_line_size()) {asm volatile("dc ivac, %0" :: "r"(start));}dsb(ish); // 数据同步屏障
}if (copy_from_user(&range, (void __user *)arg, sizeof(range))) {return -EFAULT;}invalidate_dcache_range(range.addr, range.addr + range.length);

用户态接口

 // 分配测试内存size_t size = 4096;char *buffer = malloc(size);strcpy(buffer, "Test data");// 构造参数struct cache_range range = {.addr = (unsigned long)buffer,.length = size};// 调用 IOCTL 失效 Cacheif (ioctl(fd, 0, &range) < 0) {

上述代码可以正常运行。 

内核态invalid,用户态mmap物理地址

内核态同上,但是用户态测试用的地址变为mmap映射

于是我们得到了内核异常,报段错误

  576.716499][ 4] [ T2037] Unable to handle kernel access to user memory outside uaccess routines at virtual address 0000007f7b5da740
[  576.728329][ 4] [ T2037] Mem abort info:
[  576.732249][ 4] [ T2037]   ESR = 0x9600014f
[  576.736429][ 4] [ T2037]   EC = 0x25: DABT (current EL), IL = 32 bits
[  576.742867][ 4] [ T2037]   SET = 0, FnV = 0
[  576.747048][ 4] [ T2037]   EA = 0, S1PTW = 0
[  576.751313][ 4] [ T2037] Data abort info:
[  576.755318][ 4] [ T2037]   ISV = 0, ISS = 0x0000014f
[  576.760278][ 4] [ T2037]   CM = 1, WnR = 1
[  576.764371][ 4] [ T2037] user pgtable: 4k pages, 39-bit VAs, pgdp=0000002241257000

PAN机制

         PAN(Privileged Access Never) 是 ARMv8 架构引入的一种安全特性,用于防止 内核态(Privileged Mode)直接访问用户态(User Mode)内存,从而增强系统对内存访问漏洞的防护能力。其核心思想是:即使在内核态,也不能绕过 MMU 权限检查直接访问用户空间数据,必须通过安全的拷贝函数(如 copy_from_user)  

PAN 通过 ARM 的页表权限控制,强制内核态访问用户地址时触发异常(即使 MMU 处于内核态)。

  • 若内核需访问用户数据,必须通过 copy_from_user 等安全接口(这些函数会临时禁用 PAN)

    目前板卡上此功能并未开启。通过malloc分配的内存可以invalid,也可以验证这一点

zcat /proc/config.gz |grep CONFIG_ARM64_SW_TTBR0_PANCONFIG_ARM64_SW_TTBR0_PAN is not set

  PAN机制历程   硬件支持     

ARMv8.1-PAN 特性

  • 引入时间:2014 年(ARMv8.1-A 架构)。

  • 核心机制

    • 新增 SCTLR_ELx.PAN 控制位(EL1/EL2/EL3均可配置)。

    • 内核态访问用户地址时触发 Permission Fault(即使 MMU 允许)。

  • 指令支持

    • SETPAN 指令动态切换 PAN 状态(需配合 ERET 使用)。

Linux 内核的适配

Linux 的实现

  • 初始支持
    Linux 4.10(2016年)合并 ARMv8.1-PAN 支持,通过 CONFIG_ARM64_PAN 启用。

  • 动态切换
    在合法访问用户数据时(如系统调用),临时禁用 PAN:

     软件模拟 PAN(SW PAN)

    背景

  • 兼容旧硬件
    部分 ARMv8.0 处理器(如 Cortex-A53/A57)无硬件 PAN,需软件模拟。

  • 实现原理

    • 修改页表权限,使用户空间内存在内核态 不可访问

    • 通过 TTBR0 切换模拟 PAN 效果。

  • SW PAN 补丁
    Linux 4.3(2015年)引入 CONFIG_ARM64_SW_TTBR0_PAN,通过动态切换 TTBR0 实现:

  • 性能代价
    每次用户/内核数据拷贝需切换 TTBR0,开销显著高于硬件 PAN。

总结

   1)mmap映射的地址并不能被invalid。

    2)也不能被lock

   总体的拷贝速率比内核管理的慢。后续我们采用巨页来映射,看是否相关的操作是否可行。

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86831.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86831.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86831.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记忆化搜索(dfs+memo)无环有向图

这是一道可以当作板子的极简记忆化搜索 建立a 是邻接表&#xff0c;其中 a[x] 存储从节点 x 出发能到达的所有节点。 b[x] 记录从节点 x 出发的所有边的权重之和。根据数学原理&#xff0c;我们很容易发现&#xff0c;一个根&#xff08;起点&#xff09;的期望&#xff0c;等…

使用AI豆包写一个车辆信息管理页面

记录一个基本的车辆信息管理页面&#xff0c;由豆包撰写完成&#xff0c;只需要微调页面即可。 主要功能是车辆信息的查询、新增、编辑&#xff0c;项目用到了uniapp、vue3、ts、uni-ui、z-paging 页面效果如下&#xff1a; 以上界面均由豆包生成&#xff0c;完成度非常高&am…

《HarmonyOSNext应用防崩指南:30秒定位JS Crash的破案手册》

《HarmonyOSNext应用防崩指南&#xff1a;30秒定位JS Crash的破案手册》 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习&#xff0c;有错误之处请指出我会修改。 &#x1f4a5; 哇哦&#xff01;JS Crash崩溃日志完全解析手册 当你的应用突然闪退时&am…

阅读笔记(3) 单层网络:回归(下)

阅读笔记(3) 单层网络:回归(下) 该笔记是DataWhale组队学习计划&#xff08;共度AI新圣经&#xff1a;深度学习基础与概念&#xff09;的Task03 以下内容为个人理解&#xff0c;可能存在不准确或疏漏之处&#xff0c;请以教材为主。 1. 为什么书上要提到决策理论&#xff1f; …

Mac OS系统每次开机启动后,提示:输入密码来解锁磁盘“Data”,去除提示的解决方法

问题描述&#xff1a; Mac mini外接了一个磁盘&#xff08;EX_Mac&#xff09;为默认使用的系统盘&#xff0c;内置的硬盘&#xff08;Macintosh HD&#xff09;为Mac mini自带的系统盘 外置硬盘系统每次开机都会挂载内置磁盘&#xff0c;同时会提示需要输入密码来解锁磁盘“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一个关键属性&#xff0c;用于禁止弹性项目&#xff08;flex item&#xff09;在容器空间不足时被压缩。以下是详细解释和示例&#xff1a; 核心作用 当容器的可用空间小于所有弹性项目的总宽度&#xff08;或高度&#xff09;时&#…

WHERE 子句中使用子查询:深度解析与最佳实践

&#x1f50d; WHERE 子句中使用子查询&#xff1a;深度解析与最佳实践 在 WHERE 子句中使用子查询是 SQL 的高阶技巧&#xff0c;可实现动态条件过滤。以下是全面指南&#xff0c;涵盖语法、类型、陷阱及优化策略&#xff1a; &#x1f4dc; 一、基础语法结构 SELECT 列 FR…

从0到1:不文明现象随手拍小程序开发日记(一)

前期调研 不文明现象随手拍小程序&#xff1a;在城市的快速发展进程中&#xff0c;不文明现象时有发生&#xff0c;为了有效解决这一问题&#xff0c;提升城市文明程度&#xff0c; 市民若发现不文明行为&#xff0c;如乱扔垃圾、随地吐痰、破坏公共设施、违规停车等&#xff…

STM32F103之SPI软件读写W25Q64

一、W25Q64简介 1.1 简介 W25Q64(Nor flash)、 24位地址&#xff0c;64Mbit/8MByte、是一种低成本、小型化、使用简单的非易失性存储器&#xff0c;常用于数据存储、字库存储、固件程序存储等场景 时钟频率&#xff1a;最大80MHz(STM32F103系统时钟为72MHz…

vue3+element-plus 组件功能实现 上传功能

一、整体功能概述 这段代码实现了一个基于 Vue 3 和 Element Plus 组件库的文件导入及预览功能模块。主要包含了一个主导入对话框&#xff08;用于上传文件、展示文件相关信息、进行导入操作等&#xff09;以及一个用于预览文件内容的预览对话框。支持导入特定格式&#xff08;…

OpenCV中创建Mat对象

第1章 创建Mat对象 1.1. 创建空的 Mat 对象 cv::Mat mat; 1.2. 创建灰度图像 // 创建一个 3 行 4 列、8位无符号单通道矩阵&#xff08;相当于灰度图&#xff09; cv::Mat mat(3, 4, CV_8UC1); 1.3. 创建彩色图像 // 创建三通道矩阵&#xff08;相当于彩色图像&#xff0…

10、做中学 | 五年级下期 Golang循环控制

一、一个小需求 我想要打印10遍hello world,你想怎么编写呢&#xff1f; // 需求&#xff1a;打印10遍"hello world"fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world…

机器学习算法-K近邻算法-KNN

1. K近邻算法是什么&#xff1f; 定义&#xff1a; K近邻是一种基于实例的懒惰学习&#xff08;Lazy Learning&#xff09;算法&#xff0c;用于分类和回归任务。 核心思想&#xff1a;“物以类聚”——通过计算样本间的距离&#xff0c;找到目标点的最近K个邻居&#xff0c;…

基于vue框架的法律知识咨询普及系统gwuv7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,知识类型,律师,律师推荐,法律知识,新闻类型,法律新闻,咨询律师 开题报告内容 基于Vue框架的法律知识咨询普及系统开题报告 一、研究背景与意义 随着法治社会建设的深入推进&#xff0c;公众对法律知识的需求呈现爆发式增长。然而…

Netty 揭秘CompositeByteBuf:零拷贝优化核心技术

CompositeByteBuf 类 核心设计目标​​ ​​虚拟缓冲区​​&#xff1a;将多个 ByteBuf 合并为单一逻辑视图&#xff0c;减少数据复制。​​零拷贝优化​​&#xff1a;通过组合而非复制提升性能。​​引用计数管理​​&#xff1a;统一管理底层 ByteBuf 的生命周期。 核心成…

用css实现文字字体颜色渐变

用css实现文字字体颜色渐变 background-clip 是CSS3中新增的属性&#xff0c;可以用于指定背景图片或颜色的绘制范围。利用 background-clip 属性实现文字颜色从左到右、从绿到白的渐变效果&#xff1a; 代码如下&#xff1a; .gradient-color {background-image: linear-gr…

SpringBatch处理数据性能优化

SpringBatch的Step默认使用同步方式批量处理数据&#xff0c;也可以通过配置将读数改为同步&#xff0c;处理和写入改为异步方式。 1、同步处理Step SpringBatch的Step一般由ItemReader、ItemProcessor和ItemWriter组成&#xff0c;其中ItemProcessor是可选的。他的设计思路的…

【机器学习深度学习】前馈神经网络(单隐藏层)

目录 一、什么是前馈神经网络&#xff1f; 二、数学表达式是什么&#xff1f; 三、为什么需要“非线性函数”&#xff1f; 四、NumPy 实现前馈神经网络代码示例 五、 运行结果 六、代码解析 6.1 初始化部分 6.2 前向传播 6.3 计算损失&#xff08;Loss&#xff09; 6…

设计模式系列(08):创建型模式 - 原型模式

系列导读&#xff1a;完成创建型模式的学习&#xff0c;我们来看最后一个创建型模式——原型模式。它通过复制已有对象来创建新对象&#xff0c;是一种独特的创建方式。 解决什么问题&#xff1a;通过复制现有对象来创建新对象&#xff0c;而不是重新实例化。适用于对象创建成本…

区块链到底是什么?

区块链本质上是一种去中心化的分布式账本技术&#xff0c;具有以下核心特点&#xff1a; - 去中心化&#xff1a;没有中央管理机构&#xff0c;数据由网络中的多个节点共同维护&#xff0c;比如比特币网络中各个节点都保存着完整账本。 - 分布式存储&#xff1a;数据不是存在一…