ARMv8 PAN 特性及其与 XOM 的冲突

前言 NetBSD 的 mmap(2) 手册 讲解 prot 入参的部分提到: Note that, due to hardware limitations, on some platforms PROT_WRITE may imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs should not rely on these flags being separately enforceable. 我们熟知的“权限分为 rwx,各用一个 bit 表示”只是一种理想的模型,实际硬件上不一定是这么实现的。 问题背景 ARMv8.1 …

Slab Merging 特性

该特性在条件允许的情况下可以实现将属性相近的 slab caches(即 struct kmem_cache)合并,以提高内存利用效率,减少内存碎片的产生。该特性最初独属于 SLUB 分配器(见补丁:81819f0fc828 (“SLUB core”) 的 G 小节),随后被拓展到了 SLAB 分配器:423c929cbbec (“mm/slab_common: commonize slab merge logic”) 。 然而从系统安全的角度,该特性带来一个问题:若由某子系统或模块创建的专用 slab cache 与通用的 slab caches(即 kmalloc() 使用的那些) …

ARM64 虚拟地址长度判别

ARM64 支持多种虚拟地址长度,在运行时可通过 vabits_actual 变量判别。 vabits_actual 由 5383cc6efed1 (“arm64: mm: Introduce vabits_actual”) 于 v5.4 引入(patchwork 链接 ),由 67e7fdfcc682 (“arm64: mm: introduce 52-bit userspace support”) 引入的 vabits_user 演进而来。 在 v5.10 中,该变量的赋值位于 arch/arm64/kernel/head.S 的 __create_page_tables: …

SLUB 的类三级缓存结构

前言 本文基于 6.1 版本的 Linux 内核代码,阐述笔者对 SLUB 分配器原理的个人理解。本文的分析忽略以下内容: 所有 debug 相关特性(如 KASAN) 所有安全增强特性(如 CONFIG_SLAB_FREELIST_HARDENED) SLUB per-cpu partial cache 特性(CONFIG_SLUB_CPU_PARTIAL=n) 换言之,本文只关注最底层最基础的 SLUB 运行逻辑——一种类三级缓存的结构。该想法是在上班通勤途中阅读此文 获得的启发,遂希望通过阅读代码和画图整理,将之梳理清楚。 概述 一级缓存:per-cpu SLAB cache 代表结构:struct …