linux 内存检测工具 kfence 详解(二)

news2024/11/13 13:22:01

系列博文:

linux 内存检测工具 kfence 详解(一)

linux 内存检测工具 kfence 详解(二)

回上一篇博文

0. 前言

kfence虽然代码不多,但设计的内容、逻辑比较多。为了更加清晰、轻松地理解kfence,笔者将其知识点分两篇博文:

  • 第一篇重在kfence 基础数据结构、kfence初始化、kfence内存分配和释放;
  • 第二篇重在kfence 异常种类分析、kfence report剖析、具体案例分析;

 

0.1 回顾kfence初始化

在kfence 初始化的时候,会从 memblock 中申请一块内存,即 kfence pool,这块内存当然是页对齐的。

接着会从 page2 开始,每两个page 被看成一个 metadata,前一个page是object page,被设为PG_SLAB 标记;后一个page 是fence page,被设为protect,该page 用以方式越界访问。

当然初始化的细节比较多,包括 kfence_sample_interval、kfence_enabled、kfence_metadata、kfence_freelist、kfence_allocation_key、kfence_allocation_gate、KFENCE_POOL_SIZE 等等,详细可以查看上一篇博文

0.2 回顾kfence内存分配

在kfence 内存分配中,首先会从 kfence_freelist 中取出第一个 metadata,根据其在 kfence_metadata 数组中的index 计算出metadata所在的内存虚拟地址。但slab 从 kfence获取的object 地址并不一定是metadata 的首地址,而可能存在 canary byte:

上图是将 kfence pool 中第一个 metadata 拿出来分解,page2 原来是data page,但是因为所申请的 object 并不一定是一个page,为了防止object 越界访问,kfence 会将object 以外的多余部分打上pattern,这些多出来的字节又称为 canary bytes。在 kfence free 的时候,会对这些 canary bytes 进行 check,如果发现内容发生变化,则说明出现了越界访问的情况,会报出 memroy corruption 错误。

当然,内存分配的细节更多,包括申请的size控制、kfence_allocation_gate、kfence_enabled、kfence_freelist是否为空、meta是否允许上锁、meta的状态是否为 FREED等等,具体细节可以查看上一篇博文

 

0.3 回顾kfence内存释放

如同kfence alloc,首先也还是需要拿到metadata,但这里是通过需要释放的 object 的地址来确定metadata。

接着会check canary bytes,确定是否出现 OOB;

另外,会将该data page 进行保护,为了防止在下一次分配期间该 metadata 被重新使用,发生 UAF 的现象。

1. kfence 对page fault处理

回上一篇博文

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

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

相关文章

美海军用于情报、监视和侦察的中大型无人系统概述

源自:中国指挥与控制学会 “人工智能技术与咨询” 发布 简 介 1 引 言 2 超大型无人潜航器 图1 波音“回声航行者”无人潜航器 图2 “虎鲸”超大型无人潜航器 3 中型无人水面舰艇 图3 “海鹰”无人水面舰艇 图4 “海上猎人”无人水面舰艇 4 …

今天玩到一个微信钓鱼小游戏,很有趣,居然还能玩萝卜刀

这款钓鱼冠军微信小游戏很有创意,除了传统的钓鱼玩法,居然还融合了黄金矿工的玩法,很不错的想法,而且居然还能玩最近比较火的萝卜刀,快来扫码体验一下吧,或者微信里搜索 《钓鱼冠军》小游戏,认…

Python轮廓追踪【OpenCV形态学操作】

文章目录 概要代码运行结果 概要 一些理论知识 OpenCV形态学操作理论1 OpenCV形态学操作理论2 OpenCV轮廓操作|轮廓类似详解 代码 代码如下,可以直接运行 import cv2 as cv# 定义结构元素 kernel cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) # print kern…

YOLOv8官方教程:如何训练模型

文章目录 一、简介二、YOLOv8的优点train模式特色 三、训练3.1 单 GPU 和 CPU 训练示例3.2 多GPU训练3.3 Apple M1 和 M2 MPS 训练3.4 恢复中断的训练 四、其他参数五、训练Log5.1 Comet5.2 ClearML5.3 TensorBoard 一、简介 本文介绍YOLOv8如何在单GPU、多GPU和Apple设备上训…

家用小型洗衣机哪款性价比高?热门内衣洗衣机测评

随着现代社会的快速发展,洗衣机已经成为了家家必备的电器产品。但是我们清洗贴身衣物的话,并不能直接扔进洗衣机里面洗,主要原因就是会与其他的衣物产生交叉的感染,而且又不能更好地除去贴身衣物上的细菌,因此一台内衣…

带着问题去分析:Spring Bean 生命周期 | 京东物流技术团队

1: Bean在Spring容器中是如何存储和定义的 Bean在Spring中的定义是_org.springframework.beans.factory.config.BeanDefinition_接口,BeanDefinition里面存储的就是我们编写的Java类在Spring中的元数据,包括了以下主要的元数据信息: 1&…

腾讯云价格计算器有用过的吗?好用!

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价,包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用,腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明: 腾讯云服务器价格计算器 打开腾…

ArcGIS Maps SDK for JS:关闭地图边框(v4.27)

文章目录 1 问题描述2 解决方案 1 问题描述 近期,将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27,原本去除地图的css代码失效了。v4.27需要用.esri-view-surface--touch-none::after控制边框属性。 下面为没有关闭地图边框的效果图。…

电脑录屏快捷键,轻松提升录屏效率

“想问问大家,电脑录屏有快捷键吗?每次都要去定位搜索才能打开,来来回回花费的时间太多,要是有快捷键就方便多了,有人知道电脑录屏的快捷键是什么吗。” 电脑录屏已经成为人们日常学习和工作中不可或缺的一部分&#…

WIFI7协议概述

简介 支持6G频段的320M带宽,提供更快地速度,OFDMA并发数提高至148(wifi6为74),最大连接终端数对比wifi6提升2倍 支持多链路连接,提供不同的延迟服务 支持rtwt,进行更加细化的节电管理 支持4096QAM高阶调制技术&…

中小型企业选择CRM系统时应该注意哪些?

如今市面上充斥着各种各样的CRM客户管理系统,尽管功能说的天花乱坠,中小企业选型时还是应该以自身需求为主。下面是中小企业选型CRM系统的几个要点,大家可以根据以下需求来筛选。 1、明确自身需求 决定企业选择哪一个CRM系统的前提应是需求…

盘点国产ChatGPT十大模型

什么是ChatGPT ChatGPT是一种基于OpenAI的GPT(Generative Pre-trained Transformer)模型的聊天机器人。GPT是一种基于深度学习的自然语言处理模型,它使用了Transformer架构来处理文本数据。GPT模型通过在大规模文本数据上进行预训练&#xff…

Clickhouse实时数仓建设

1.概述 Clickhouse是一个开源的列式存储数据库,其主要场景用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。今天,笔者就为大家介绍如何使用Clickhouse来构建实时数仓,来满足一些实时性要…

Docker系列---【mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?】...

mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据? 1.问题描述 为了快速搭建数据库,我使用了docker搭建数据库,由于服务器资源紧张,我想先把mysql容器停掉,启动…

Elsevier (爱思唯尔) 期刊 投稿流程与注意点

😄 Elsevier (爱思唯尔) 期刊投稿流程中还是遇到了不少问题的,本篇文章总结一些说明文档和提交要点。 ⭐ LaTex 模板说明 & 投稿流程与准备 latex模版和投稿流程相关参考说明可看下面几个网址,总结的非常全面了: Elsevier&am…

Geoda-双变量空间自相关

Geoda-双变量空间自相关https://mp.weixin.qq.com/s/cOkgBCf5ljlVJkWoIwkzxw 之前空间自相关—莫兰指数中简单写了一下如何在ArcGIS中计算莫兰指数,本次简要演示在Geoda中计算双变量空间自相关的步骤。案例数据是武汉市资源环境承载力指数(RECC&#xf…

Golang关键字-select

一、Select解决什么问题&#xff1f; 在Golang中&#xff0c;两个协程之间通信Channel&#xff08;图一&#xff09;&#xff0c;在接受协程中通过代码表示即为<ch&#xff1b;如果协程需要监听多个Channel&#xff0c;只要有其中一个满足条件&#xff0c;就执行相应的逻辑&…

尚硅谷Flume(仅有基础)

q 1 概述 1.1 定义 Flume 是Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构&#xff0c;灵活简单。 Flume最主要的作用就是&#xff0c;实时读取服务器本地磁盘的数据&#xff0c;将数据写入到HD…

易点易动固定资产管理系统:高效盘点海量固定资产的得力助手

固定资产是企业重要的财务资源之一&#xff0c;盘点是保证固定资产准确性和完整性的关键环节。然而&#xff0c;对于拥有海量固定资产的企业来说&#xff0c;传统的手工盘点方式效率低下且容易出错。为了解决这一难题&#xff0c;易点易动固定资产管理系统应运而生。本文将深入…

AM@第二类换元法积分

文章目录 abstract第一类换元法第二类换元法分析定理&#x1f47a;证明第二类换元公式的应用 倒代换三角恒等化去根式其他使用第二换元法情形例 附加积分公式表例 附 abstract 第二类换元法(简称第二换元法)的原理和应用 第一类换元法 通过变量代换 u ϕ ( x ) u\phi(x) uϕ…