内核地址消毒剂(KASAN)

概述
Kernel Address SANitizer(KASAN)是一种动态内存安全错误检测工具,主要功能是 检查内存越界访问和使用已释放内存的问题。

KASAN有三种模式:

通用KASAN
基于软件标签的KASAN
基于硬件标签的KASAN
用CONFIG_KASAN_GENERIC启用的通用KASAN,是用于调试的模式,类似于用户空 间的ASan。这种模式在许多CPU架构上都被支持,但它有明显的性能和内存开销。

基于软件标签的KASAN或SW_TAGS KASAN,通过CONFIG_KASAN_SW_TAGS启用, 可以用于调试和自我测试,类似于用户空间HWASan。这种模式只支持arm64,但其 适度的内存开销允许在内存受限的设备上用真实的工作负载进行测试。

基于硬件标签的KASAN或HW_TAGS KASAN,用CONFIG_KASAN_HW_TAGS启用,被 用作现场内存错误检测器或作为安全缓解的模式。这种模式只在支持MTE(内存标签 扩展)的arm64 CPU上工作,但它的内存和性能开销很低,因此可以在生产中使用。

关于每种KASAN模式的内存和性能影响的细节,请参见相应的Kconfig选项的描述。

通用模式和基于软件标签的模式通常被称为软件模式。基于软件标签的模式和基于 硬件标签的模式被称为基于标签的模式。

支持
体系架构
在x86_64、arm、arm64、powerpc、riscv、s390、xtensa和loongarch上支持通用KASAN, 而基于标签的KASAN模式只在arm64上支持。

编译器
软件KASAN模式使用编译时工具在每个内存访问之前插入有效性检查,因此需要一个 提供支持的编译器版本。基于硬件标签的模式依靠硬件来执行这些检查,但仍然需要 一个支持内存标签指令的编译器版本。

通用KASAN需要GCC 8.3.0版本或更高版本,或者内核支持的任何Clang版本。

基于软件标签的KASAN需要GCC 11+或者内核支持的任何Clang版本。

基于硬件标签的KASAN需要GCC 10+或Clang 12+。

内存类型
通用KASAN支持在所有的slab、page_alloc、vmap、vmalloc、堆栈和全局内存 中查找错误。

基于软件标签的KASAN支持slab、page_alloc、vmalloc和堆栈内存。

基于硬件标签的KASAN支持slab、page_alloc和不可执行的vmalloc内存。

对于slab,两种软件KASAN模式都支持SLUB和SLAB分配器,而基于硬件标签的 KASAN只支持SLUB。

用法
要启用KASAN,请使用以下命令配置内核:

CONFIG_KASAN=y
同时在 CONFIG_KASAN_GENERIC (启用通用KASAN模式), CONFIG_KASAN_SW_TAGS (启用基于硬件标签的KASAN模式),和 CONFIG_KASAN_HW_TAGS (启用基于硬件标签 的KASAN模式)之间进行选择。

对于软件模式,还可以在 CONFIG_KASAN_OUTLINE 和 CONFIG_KASAN_INLINE 之间进行选择。outline和inline是编译器插桩类型。前者产生较小的二进制文件, 而后者快2倍。

要将受影响的slab对象的alloc和free堆栈跟踪包含到报告中,请启用 CONFIG_STACKTRACE 。要包括受影响物理页面的分配和释放堆栈跟踪的话, 请启用 CONFIG_PAGE_OWNER 并使用 page_owner=on 进行引导。

启动参数
KASAN受到通用 panic_on_warn 命令行参数的影响。当它被启用时,KASAN 在打印出错误报告后会使内核恐慌。

默认情况下,KASAN只对第一个无效的内存访问打印错误报告。使用 kasan_multi_shot,KASAN对每一个无效的访问都打印一份报告。这会禁用 了KASAN报告的 panic_on_warn。

另外,独立于 panic_on_warn 、 kasan.fault= boot参数可以用 来控制恐慌和报告行为。

kasan.fault=report 或 =panic 控制是否只打印KASAN report或 同时使内核恐慌(默认: report )。即使 kasan_multi_shot 被 启用,恐慌也会发生。

基于软件和硬件标签的KASAN模式(见下面关于各种模式的部分)支持改变堆栈跟 踪收集行为:

kasan.stacktrace=off 或 =on 禁用或启用分配和释放堆栈痕 迹的收集(默认: on )。

kasan.stack_ring_size= 指定堆栈环的条 目数(默认: 32768 )。

基于硬件标签的KASAN模式是为了在生产中作为一种安全缓解措施使用。因此,它 支持额外的启动参数,允许完全禁用KASAN或控制其功能。

kasan=off 或 =on 控制KASAN是否被启用(默认: on )。

kasan.mode=sync, =async o

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

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

相关文章

SolidKits.BOMs工具—BOM及焊件切割清单输出

SolidKits.BOMs工具—BOM及焊件切割清单输出包含自动出BOM,自定义模板,焊件切割清单的输出,虚拟件的输出等功能,使用该功能,无需打开SOLIDWORKS软件,可大大提高工作效率。为回馈新老客户,此工具…

Ubuntu 常用命令之 exit 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 exit命令在Ubuntu系统下用于结束一个终端会话。它可以用于退出当前的shell,结束当前的脚本执行,或者结束一个ssh会话。 exit命令的参数是一个可选的整数,用于指定退出状态。如果没有指定&#…

基于ip地址通过openssl生成自签名证书

最近在配置geo的时候,客户说自己使用的是自签证书,然后是通过ip地址和端口的方式访问gitlab,比较好奇这块,因此对证书的生成和使用做了一些整理,对此网上关于这部分资料也很多,不过作为记录,也算…

美国的目的暴露了,夺下6台EUV光刻机推进2纳米,反超台积电

日前消息指光刻机巨头ASML预计明年量产10台第二代EUV光刻机,其中6台已确定被美国芯片企业Intel夺下,剩下的两台将由三星和台积电竞争,如此一来拿到更多第二代EUV光刻机的美国可望率先量产2纳米,反超台积电。 一、第二代EUV光刻机的…

Pytorch项目,肺癌检测项目之二

diameter_dict{} with open(/xunlian/annotations.csv ,‘r’) as f: for row in list(csv.reader(f)[1:]): series_uid row[0] annotationCenter_xyz tuple([float(x) for x in row[1:4]]) annotationDiameter_mm float(row[4]) diameter_dict.setdefault(seri…

Qt中字符串转换为JS的函数执行

简介 在 QML 中,将 JavaScript 字符串转换为函数通常涉及使用 Function 构造函数或 eval() 函数。但是,QML 的环境对 JavaScript 的支持有一定的限制,因此不是所有的 JavaScript 功能都可以在 QML 中直接使用。 以下介绍都是在Qt5.12.1…

Spring简介

一:Spring是什么 Spring是分层的Java SE/EE应用full-stack(各层都有对应解决方案)轻量级(api较少,学习成本较低)开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp…

最新Unity DOTS Physics物理引擎碰撞事件处理

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics物理引擎的主要流程与Pipeline Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来…

基于SpringBoot简洁优雅的个人博客系统

源代码下载地址: 点击这里下载 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或…

java八股jvm

JVM虚拟机篇-01-JVM介绍、运行流程_哔哩哔哩_bilibili 1.PC程序计数器 2.堆 3.虚拟机栈 4.方法区/永久代/元空间 5.直接内存 JVM虚拟机篇-06-JVM组成-你听过直接内存吗_哔哩哔哩_bilibili 6.双亲委派 从下往上找,有同名类优先使用上级加载器的,不用自…

【SpringBoot篇】基于Redis实现生成全局唯一ID的方法

文章目录 🍔生成全局唯一ID🌹为什么要生成全局唯一id🌺生成全局id的方法✨代码实现 🍔生成全局唯一ID 是一种在分布式系统下用来生成全局唯一id的工具 在项目中生成全局唯一ID有很多好处,其中包括: 数据…

***linux 配置服务开机自启动

目录 一、如何让一个服务或脚本开机自启动? 1. 三种解决方案 2. systemd 和 chkconfig 二、chkconfig 1. chkconfig 管理服务脚本要求 2. chkconfig命令 三、Linux 运行级别 四、参考 linux 配置服务开机自启动(systemd 和 chkconfig --add 设置…

sql-labs服务器结构

双层服务器结构 一个是tomcat的jsp服务器,一个是apache的php服务器,提供服务的是php服务器,只是tomcat向php服务器请求数据,php服务器返回数据给tomcat。 此处的29-32关都是这个结构,不是用docker拉取的镜像要搭建一下…

【Python】异常、模块与包

一、异常的概念 二、异常的捕获方法 三、异常的传递 四、Python模块 五、Python包 六、安装第三方Python包 一、异常的概念 什么是异常: 异常就是程序运行的过程中出现了错误bug是什么意思: bug就是指异常的意思,因为历史因为小虫子导致计算…

java.lang.NullPointerException出现的原因及解决方案

java.lang.NullPointerException出现的原因及解决方案 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在编程的世界里,我们常常遇到NullPointerExceptio…

ansible-playbook的Temlates模块 tags模块 Roles模块

Temlates模块 jinja模板架构,通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去,生产一个目标文本文件,传递变量到需要的配置文件当中 (web开发) nginx.conf.j2 早文件当中配置的是占位符(声明…

Error in `arrange()`: ! Can‘t transform a data frame with `NA` or `““` names.

问题:给Taxonomy排序,并筛选OTU表中存在的 根据提示运行:rlang::last_error(),显示: Backtrace:▆1. ├─dplyr::arrange(taxonomy, phylum, class, order, family, full)2. ├─dplyr:::arrange.data.frame(taxonom…

【SpringBoot篇】解决缓存击穿问题① — 基于互斥锁方式

文章目录 🌹什么是缓存击穿🌺基于互斥锁解决问题🛸思路 🏳️‍🌈代码实现 🌹什么是缓存击穿 缓存击穿是指在使用缓存系统时,对一个热点数据的高并发请求导致缓存失效,多个请求同时访…

云渲染怎么批量效果图、影视动画?云渲染在效果图、影视的作用

在设计和建筑领域,设计师往往需要制作出精细逼真的效果图以向客户展示他们的设计思路。然而,在这些行业中,大量生成效果图需求非常费时费力。幸运的是,日期到了云渲染的这个时代,设计师们可以通过云渲染服务以一种更加…

小程序面试题 | 12.精选小程序面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…