]> git.karo-electronics.de Git - linux-beck.git/blobdiff - mm/slub.c
mm, kasan: account for object redzone in SLUB's nearest_obj()
[linux-beck.git] / mm / slub.c
index a2fe4edc3599d9e54581bcbca3655de6db49ebe2..1cdde1a5ba5ff4f272e029068158e36c0f2e539e 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -124,7 +124,7 @@ static inline int kmem_cache_debug(struct kmem_cache *s)
 #endif
 }
 
-static inline void *fixup_red_left(struct kmem_cache *s, void *p)
+inline void *fixup_red_left(struct kmem_cache *s, void *p)
 {
        if (kmem_cache_debug(s) && s->flags & SLAB_RED_ZONE)
                p += s->red_left_pad;
@@ -1613,8 +1613,9 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node)
 {
        if (unlikely(flags & GFP_SLAB_BUG_MASK)) {
                gfp_t invalid_mask = flags & GFP_SLAB_BUG_MASK;
-               pr_emerg("Unexpected gfp: %#x (%pGg)\n", invalid_mask, &invalid_mask);
-               BUG();
+               flags &= ~GFP_SLAB_BUG_MASK;
+               pr_warn("Unexpected gfp: %#x (%pGg). Fixing up to gfp: %#x (%pGg). Fix your code!\n",
+                               invalid_mask, &invalid_mask, flags, &flags);
        }
 
        return allocate_slab(s,
@@ -2976,7 +2977,7 @@ int build_detached_freelist(struct kmem_cache *s, size_t size,
                if (unlikely(!PageSlab(page))) {
                        BUG_ON(!PageCompound(page));
                        kfree_hook(object);
-                       __free_kmem_pages(page, compound_order(page));
+                       __free_pages(page, compound_order(page));
                        p[size] = NULL; /* mark object processed */
                        return size;
                }
@@ -3692,7 +3693,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
        void *ptr = NULL;
 
        flags |= __GFP_COMP | __GFP_NOTRACK;
-       page = alloc_kmem_pages_node(node, flags, get_order(size));
+       page = alloc_pages_node(node, flags, get_order(size));
        if (page)
                ptr = page_address(page);
 
@@ -3773,7 +3774,7 @@ void kfree(const void *x)
        if (unlikely(!PageSlab(page))) {
                BUG_ON(!PageCompound(page));
                kfree_hook(x);
-               __free_kmem_pages(page, compound_order(page));
+               __free_pages(page, compound_order(page));
                return;
        }
        slab_free(page->slab_cache, page, object, NULL, 1, _RET_IP_);