@@ -638,19 +638,19 @@ static inline void metadata_access_disable(void)
* Object debugging
*/
-/* Verify that a pointer has an address that is valid within a slab page */
+/* Verify that a pointer has an address that is valid within a slab */
static inline int check_valid_pointer(struct kmem_cache *s,
- struct page *page, void *object)
+ struct slab *slab, void *object)
{
void *base;
if (!object)
return 1;
- base = page_address(page);
+ base = slab_address(slab);
object = kasan_reset_tag(object);
object = restore_red_left(s, object);
- if (object < base || object >= base + page->objects * s->size ||
+ if (object < base || object >= base + slab->objects * s->size ||
(object - base) % s->size) {
return 0;
}
@@ -803,7 +803,7 @@ static bool freelist_corrupted(struct kmem_cache *s, struct slab *slab,
void **freelist, void *nextfree)
{
if ((s->flags & SLAB_CONSISTENCY_CHECKS) &&
- !check_valid_pointer(s, slab_page(slab), nextfree) && freelist) {
+ !check_valid_pointer(s, slab, nextfree) && freelist) {
object_err(s, slab_page(slab), *freelist, "Freechain corrupt");
*freelist = NULL;
slab_fix(s, "Isolate corrupted freechain");
@@ -1072,7 +1072,7 @@ static int check_object(struct kmem_cache *s, struct slab *slab,
return 1;
/* Check free pointer validity */
- if (!check_valid_pointer(s, slab_page(slab), get_freepointer(s, p))) {
+ if (!check_valid_pointer(s, slab, get_freepointer(s, p))) {
object_err(s, slab_page(slab), p, "Freepointer corrupt");
/*
* No choice but to zap it and thus lose the remainder
@@ -1125,7 +1125,7 @@ static int on_freelist(struct kmem_cache *s, struct slab *slab, void *search)
while (fp && nr <= slab->objects) {
if (fp == search)
return 1;
- if (!check_valid_pointer(s, slab_page(slab), fp)) {
+ if (!check_valid_pointer(s, slab, fp)) {
if (object) {
object_err(s, slab_page(slab), object,
"Freechain corrupt");
@@ -1266,7 +1266,7 @@ static inline int alloc_consistency_checks(struct kmem_cache *s,
if (!check_slab(s, slab))
return 0;
- if (!check_valid_pointer(s, slab_page(slab), object)) {
+ if (!check_valid_pointer(s, slab, object)) {
object_err(s, slab_page(slab), object, "Freelist Pointer check fails");
return 0;
}
@@ -1310,7 +1310,7 @@ static noinline int alloc_debug_processing(struct kmem_cache *s,
static inline int free_consistency_checks(struct kmem_cache *s,
struct slab *slab, void *object, unsigned long addr)
{
- if (!check_valid_pointer(s, slab_page(slab), object)) {
+ if (!check_valid_pointer(s, slab, object)) {
slab_err(s, slab_page(slab), "Invalid object pointer 0x%p", object);
return 0;
}
Improves type safety and removes a lot of calls to slab_page(). Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- mm/slub.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)