summaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 07edad305512..f7940048138c 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -397,18 +397,15 @@ static inline void *freelist_ptr_decode(const struct kmem_cache *s,
return decoded;
}
-/* Returns the freelist pointer recorded at location ptr_addr. */
-static inline void *freelist_dereference(const struct kmem_cache *s,
- void *ptr_addr)
-{
- return freelist_ptr_decode(s, *(freeptr_t *)(ptr_addr),
- (unsigned long)ptr_addr);
-}
-
static inline void *get_freepointer(struct kmem_cache *s, void *object)
{
+ unsigned long ptr_addr;
+ freeptr_t p;
+
object = kasan_reset_tag(object);
- return freelist_dereference(s, (freeptr_t *)(object + s->offset));
+ ptr_addr = (unsigned long)object + s->offset;
+ p = *(freeptr_t *)(ptr_addr);
+ return freelist_ptr_decode(s, p, ptr_addr);
}
#ifndef CONFIG_SLUB_TINY