[PATCH 0/6] slab: struct slab pointer validation improvements

Vlastimil Babka
2025-09-11T17:02:43Z

This tries to combine the goals of the first 4 patches from Matthew's
series [1] with points raised during review by Christoph and myself.
Patch 4 from [1] is taken as patch 1 here. In other cases the struct
slab pointer validation is better to move to a place where it can be
performed before touching any of the struct slab fields, rather than
removing it completely.

Further we wrap the validation in a function validate_slab_ptr() and
make the impementation use struct page instead of struct folio to be
compatible with the rest of the series [1]. With further changes towards
memdesc the implementation can change accordingly, if it will still make
sense.

The summary is that we validate pointers from the node partial list when
allocating from it or when validation is triggered from sysfs. When
freeing, we always obtain the slab pointer in a way that the page type
is tested in the process, so we don't need to validate.

Based on:
https://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git/log/?h=slab/for-6.18/fixes

[1] https://lore.kernel.org/all/20250910115507.1991829-1-willy@infradead.org/

Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
Matthew Wilcox (Oracle) (1):
slab: Remove dead code in free_consistency_checks()

Vlastimil Babka (5):
slab: wrap debug slab validation in validate_slab_ptr()
slab: move validate_slab_ptr() from check_slab() to its callers
slab: move validate_slab_ptr() from alloc_consistency_checks() to its caller
slab: validate slab before using it in alloc_single_from_partial()
slab: don't validate slab pointer in free_debug_processing()

mm/slub.c | 61 +++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 37 insertions(+), 24 deletions(-)
---
base-commit: 41534d499e50e23571d6b9960498777d93f817ce
change-id: 20250911-slub-slab-validation-0e4f559b0a1d

Best regards,
--
Vlastimil Babka <vbabka@suse.cz>