kasan

理解 ARM64 内核中对 52 位虚拟地址的支持

北城余情 提交于 2021-02-01 11:05:28
随着 64 位硬件的引入,增加了处理更大地址空间的需求。 当 64 位硬件变得可用之后,处理更大地址空间(大于 232 字节)的需求变得显而易见。现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址空间大于 248 字节(可以使用默认的 48 位地址支持)。 x86_64 架构通过让硬件和软件启用五级页表以支持这些用例。它允许寻址的地址空间等于 257 字节(详情见 x86:在 4.12 内核中启用 5 级页表 )。它突破了过去虚拟地址空间 128PiB 和物理地址空间 4PiB 的上限。 arm64 架构通过引入两个新的体系结构 —— ARMv8.2 LVA(更大的虚拟寻址) 和 ARMv8.2 LPA(更大的物理地址寻址) —— 拓展来实现相同的功能。这允许使用 4PiB 的虚拟地址空间和 4PiB 的物理地址空间(即分别为 252 位)。 随着新的 arm64 CPU 中支持了 ARMv8.2 体系结构拓展,同时现在开源软件也支持了这两种新的硬件拓展。 从 Linux 5.4 内核开始, arm64 架构中的 52 位(大)虚拟地址(VA)和物理地址(PA)得到支持。尽管 内核文档 描述了这些特性和新的内核运行时对旧的 CPU(硬件层面不支持 52 位虚拟地址拓展)和新的 CPU(硬件层面支持 52 位虚拟地址拓展

ubuntu16.04上启用KASan动态检测内核内存错误(ubuntu16.04 4.4.0内核编译升级到linux-4.4.252版本)

余生长醉 提交于 2021-01-22 13:33:52
因为kasan在内核版本V4.0后才支持,默认是不启用kasan,所以需要编译配置内核才能启用支持(gcc版本要求5.0及以上才完全支持)。 本文实验环境: root@ubuntu:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial root@ubuntu:~# root@ubuntu:~# uname -r 4.4.0-142-generic root@ubuntu:~# 所以本文先将ubuntu16.04的4.4.0内核编译升级到linux-4.4.252版本内核,之后编码测试kasan的输出检测情况。 一、编译内核并配置支持kasan 1、下载源码 在 Linux官网 下载内核源码,我这里选择了 linux-4.4.252源码 。 下载完成后,解压到/usr/src下。 2、安装编译内核必须的库: apt-get install nc libssl-dev -y apt-get install build-essential openssl -y apt-get install zlibc minizip -y apt-get install libidn11

虚拟地址布局

孤人 提交于 2020-05-01 14:19:46
Linux版本:4.14.74 #1 Linux虚拟内存布局# 在ARM64中,地址线由32bit变为64bit,但是64bit并不是全用到了,最大支持48位物理寻址,最大可寻找256T的物理地址空间,对于目前的应用来讲完全足够了。 虚拟地址的最大宽度可配置,最大为48bit,还可以有36bit,39bit,42bit,47bit 1. [arch/arm64/Kconfig] 2. 3. config ARM64_VA_BITS 4. int 5. default 36 if ARM64_VA_BITS_36 6. default 39 if ARM64_VA_BITS_39 7. default 42 if ARM64_VA_BITS_42 8. default 47 if ARM64_VA_BITS_47 9. default 48 if ARM64_VA_BITS_48 10. 11. [arch/arm64/ configs/xj2_debug_defconfig] 12. CONFIG_ARM64_VA_BITS_39=y 以39bit为例,。用户空间和内核空间大小均为512G。 用户空间范围:0x0000-0000-0000-0000----0x0000-007f-ffff-ffff 内核空间范围:0xffff-ff800-0000-0000—0xffff-ffff