[RFC PATCH 0/5] mm/slub: preserve previous object lifetime

From: Pengpeng Hou

Date: Thu Jun 11 2026 - 02:42:22 EST


SLAB_STORE_USER currently stores one allocation track and one free track
for an object. This is useful, but it loses part of the previous lifetime
when the object is reused: the new allocation overwrites the allocation
track, and a later stale free can overwrite the free track.

For free-after-reuse bugs, the report can therefore contain the victim
allocation and the stale free, while the earlier alloc/free pair that
explains where the stale pointer came from is no longer available.

This RFC adds an opt-in SLUB debug option to keep one previous completed
object lifetime. The option is disabled by default, is not part of the
default debug flags, and only takes effect when user tracking is already
enabled:

slab_debug=UH,kmalloc-128

The series intentionally does not attempt to infer semantic ownership or
identify the root cause of a use-after-free. It only preserves and prints
additional track records that SLUB already knows how to collect.

This is sent as RFC because the user-visible interface and the cost/benefit
tradeoff should be agreed on before this becomes a normal patch series.
In particular, feedback would be useful on:

- whether a separate H option is preferable to extending U directly
- whether H should require U, as implemented here, or imply U
- whether the extra per-object metadata is useful enough for this debug path

Not included yet:

- KUnit coverage or a standalone reproducer
- object-size/order comparison data for representative caches
- runtime benchmark data for slab_debug=U vs slab_debug=UH

Those should be added before a non-RFC submission if the direction looks
acceptable.

Pengpeng Hou (5):
mm/slub: factor user tracking metadata size calculation
mm/slub: add optional previous lifetime user tracking
mm/slub: print previous object lifetime in debug reports
Documentation/mm: document SLUB previous lifetime tracking
mm/slub: sanitize previous lifetime tracking flags

Documentation/admin-guide/mm/slab.rst | 22 ++++-
include/linux/slab.h | 3 +
mm/slab.h | 3 +-
mm/slub.c | 118 ++++++++++++++++++++++----
4 files changed, 128 insertions(+), 18 deletions(-)

--
2.50.1 (Apple Git-155)