v3 2026-11-13

slab 加固特性启动可选 · v3

默认启用 SLAB_FREELIST_HARDENED/RANDOM,并允许启动时关闭 SLAB_BUCKETS 和 kmalloc 分区缓存。

原始补丁链接

子 Patch(6)

1/6
mm/slab: Enable SLAB_FREELIST_HARDENED by default
把 SLAB_FREELIST_HARDENED 的 Kconfig 默认值改为 y,混淆空闲对象链表指针以捕获朴素 double free 和错 cache free;sheaves 下 per-CPU 快路径不碰 freelist,开销小。
2/6
mm/slab: Enable SLAB_FREELIST_RANDOM by default
把 SLAB_FREELIST_RANDOM 默认设为 y,新 slab 初始化时随机化对象发放顺序以增加堆利用难度;代价只在新 slab 建立时,系统级基准无可测变化,微基准单对象可慢约 30%。
3/6
mm/slab: Support disabling SLAB_BUCKETS at boot
新增 slab_buckets= 启动参数,CONFIG_SLAB_BUCKETS=y 时默认开启、可引导时关闭;关闭后 memdup_user()/msg_msg 等不再走独立 kmalloc cache,避免隔离用户可控内容带来的额外 cache 内存。
4/6
slub_kunit: Add a test for the slab_buckets boot parameter
在 slub_kunit 中验证 slab_buckets:默认 memdup_user() 从专用 bucket cache 分配,slab_buckets=0 时回到普通 kmalloc cache;无 CONFIG_SLAB_BUCKETS 跳过,并把 slab_buckets_enabled 导出给 KUnit。
5/6
mm/slab: Support disabling KMALLOC_PARTITION_CACHES at boot
新增 kmalloc_partition= 启动参数,CONFIG_KMALLOC_PARTITION_CACHES=y 时默认开启、可关闭;关闭后各 kmalloc_type 分区 cache 别名到普通 kmalloc cache,避免每 CPU/每分区副本带来约 18MiB 额外 slab 内存。
6/6
slub_kunit: Add a test for the kmalloc_partition boot parameter
在 slub_kunit 中验证 kmalloc_partition:默认分区索引指向独立 kmalloc cache,kmalloc_partition=0 时别名到普通 cache;无 CONFIG_KMALLOC_PARTITION_CACHES 跳过,并导出 kmalloc_partition_enabled 供测试读取。