static void print_address_description(struct kasan_access_info *info) { const void *addr = info->access_addr; if ((addr >= (void *)PAGE_OFFSET) && (addr < high_memory)) { struct page *page = virt_to_head_page(addr); if (PageSlab(page)) { void *object; struct kmem_cache *cache = page->slab_cache; object = nearest_obj(cache, page, (void *)info->access_addr); kasan_object_err(cache, object); return; } dump_page(page, "kasan: bad access detected"); } if (kernel_or_module_addr(addr)) { if (!init_task_stack_addr(addr)) pr_err("Address belongs to variable %pS\n", addr); } dump_stack(); }
static void print_address_description(struct kasan_access_info *info) { const void *addr = info->access_addr; if ((addr >= (void *)PAGE_OFFSET) && (addr < high_memory)) { struct page *page = virt_to_head_page(addr); if (PageSlab(page)) { void *object; struct kmem_cache *cache = page->slab_cache; void *last_object; object = virt_to_obj(cache, page_address(page), addr); last_object = page_address(page) + page->objects * cache->size; if (unlikely(object > last_object)) object = last_object; /* we hit into padding */ object_err(cache, page, object, "kasan: bad access detected"); return; } dump_page(page, "kasan: bad access detected"); } if (kernel_or_module_addr(addr)) { if (!init_task_stack_addr(addr)) pr_err("Address belongs to variable %pS\n", addr); } dump_stack(); }
static void print_address_description(void *addr) { struct page *page = addr_to_page(addr); dump_stack(); pr_err("\n"); if (page && PageSlab(page)) { struct kmem_cache *cache = page->slab_cache; void *object = nearest_obj(cache, page, addr); describe_object(cache, object, addr); } if (kernel_or_module_addr(addr) && !init_task_stack_addr(addr)) { pr_err("The buggy address belongs to the variable:\n"); pr_err(" %pS\n", addr); } if (page) { pr_err("The buggy address belongs to the page:\n"); dump_page(page, "kasan: bad access detected"); } }