mm/kasan: get rid of ->state in struct kasan_alloc_meta
[cascardo/linux.git] / mm / kasan / report.c
index b3c122d..f437398 100644 (file)
@@ -116,7 +116,6 @@ static inline bool init_task_stack_addr(const void *addr)
                        sizeof(init_thread_union.stack));
 }
 
-#ifdef CONFIG_SLAB
 static void print_track(struct kasan_track *track)
 {
        pr_err("PID = %u\n", track->pid);
@@ -130,39 +129,23 @@ static void print_track(struct kasan_track *track)
        }
 }
 
-static void object_err(struct kmem_cache *cache, struct page *page,
-                       void *object, char *unused_reason)
+static void kasan_object_err(struct kmem_cache *cache, struct page *page,
+                               void *object, char *unused_reason)
 {
        struct kasan_alloc_meta *alloc_info = get_alloc_info(cache, object);
-       struct kasan_free_meta *free_info;
 
        dump_stack();
-       pr_err("Object at %p, in cache %s\n", object, cache->name);
+       pr_err("Object at %p, in cache %s size: %d\n", object, cache->name,
+               cache->object_size);
+
        if (!(cache->flags & SLAB_KASAN))
                return;
-       switch (alloc_info->state) {
-       case KASAN_STATE_INIT:
-               pr_err("Object not allocated yet\n");
-               break;
-       case KASAN_STATE_ALLOC:
-               pr_err("Object allocated with size %u bytes.\n",
-                      alloc_info->alloc_size);
-               pr_err("Allocation:\n");
-               print_track(&alloc_info->track);
-               break;
-       case KASAN_STATE_FREE:
-       case KASAN_STATE_QUARANTINE:
-               pr_err("Object freed, allocated with size %u bytes\n",
-                      alloc_info->alloc_size);
-               free_info = get_free_info(cache, object);
-               pr_err("Allocation:\n");
-               print_track(&alloc_info->track);
-               pr_err("Deallocation:\n");
-               print_track(&free_info->track);
-               break;
-       }
+
+       pr_err("Allocated:\n");
+       print_track(&alloc_info->alloc_track);
+       pr_err("Freed:\n");
+       print_track(&alloc_info->free_track);
 }
-#endif
 
 static void print_address_description(struct kasan_access_info *info)
 {
@@ -177,7 +160,7 @@ static void print_address_description(struct kasan_access_info *info)
                        struct kmem_cache *cache = page->slab_cache;
                        object = nearest_obj(cache, page,
                                                (void *)info->access_addr);
-                       object_err(cache, page, object,
+                       kasan_object_err(cache, page, object,
                                        "kasan: bad access detected");
                        return;
                }