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: …

ARMv8.3 的 PAC 特性

名词释义: PAC: Pointer Authentication Code PA: Pointer Authentication SCTLR: System ConTroL Register 该特性为指针值提供【签名】和【校验】的能力。ARM64 硬件上提供 5 个秘钥,分别用于为三种地址生成 PAC: 代码地址:API{A,B}Key 数据地址:APD{A,B}Key 通用地址:APGAKey PAC 的值是关于以下三者的函数:1、指针本身;2、上下文相关值(也称 Modifier)1;3、秘钥。 生成后,PAC 会被附在指针值上(即“签在上面”),其所处的位置和长度与当前处理器:1)设置的虚拟地址长度以及;2) …

内核代码中的编译时检查

之前在工作中涉及对 2022 年 Linux Security Summit North America(LSS-NA)的调研,并向同事们介绍了其中一个演讲:Meaningful Bounds Checking in the Linux Kernel (演讲材料 )。在分享过程中,有这样一段内容: 1__FORTIFY_INLINE void *memcpy(void *dst, const void *src, size_t size) 2{ 3 size_t dst_size = __builtin_object_size(dst, 1); 4 size_t src_size = …

Things That Happen Around Function Calls

Registers: call-clobbered v.s. call-preserved Call-clobbered registers a.k.a. caller-saved or volatile registers; “scratch register/temporary register” in AAPCS32, “scratch” registers in x86 Registers whose values would be changed (or “clobbered”) across a function call, and so the …