SELinux:系统启动时通过用户态配置动态关闭的流程

要在系统启动时彻底关闭 SELinux(即设为 Disabled 状态),已知有几种办法: 内核启动参数 selinux=0 配置 /etc/selinux/config 关于 /etc/selinux/config,我们知道可以通过它来对 SELinux 进行初始设置,包括运行状态以及要加载的策略文件。那么,这是怎么做到的呢?又是谁实际执行了这些操作?在开闭 SELinux 上,通过它与通过内核启动参数有何不同? 首先,内核对该文件完全是不感知的:查遍 security/selinux 下的所有代码,都没有关于该文件的内容。随后在 Fedora 的 Wiki 上查到: When booting up the machine, …

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