Commit 92a38eac authored by Andrey Konovalov's avatar Andrey Konovalov Committed by Andrew Morton

kasan: rework function arguments in report.c

Pass a pointer to kasan_report_info to describe_object() and
describe_object_stacks(), instead of passing the structure's fields.

The untagged pointer and the tag are still passed as separate arguments to
some of the functions to avoid duplicating the untagging logic.

This is preparatory change for the next patch.

Link: https://lkml.kernel.org/r/2e0cdb91524ab528a3c2b12b6d8bcb69512fc4af.1662411799.git.andreyknvl@google.comSigned-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
Reviewed-by: default avatarMarco Elver <elver@google.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Evgenii Stepanov <eugenis@google.com>
Cc: Peter Collingbourne <pcc@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 7fae3dd0
...@@ -213,8 +213,8 @@ static inline struct page *addr_to_page(const void *addr) ...@@ -213,8 +213,8 @@ static inline struct page *addr_to_page(const void *addr)
return NULL; return NULL;
} }
static void describe_object_addr(struct kmem_cache *cache, void *object, static void describe_object_addr(const void *addr, struct kmem_cache *cache,
const void *addr) void *object)
{ {
unsigned long access_addr = (unsigned long)addr; unsigned long access_addr = (unsigned long)addr;
unsigned long object_addr = (unsigned long)object; unsigned long object_addr = (unsigned long)object;
...@@ -242,33 +242,32 @@ static void describe_object_addr(struct kmem_cache *cache, void *object, ...@@ -242,33 +242,32 @@ static void describe_object_addr(struct kmem_cache *cache, void *object,
(void *)(object_addr + cache->object_size)); (void *)(object_addr + cache->object_size));
} }
static void describe_object_stacks(struct kmem_cache *cache, void *object, static void describe_object_stacks(u8 tag, struct kasan_report_info *info)
const void *addr, u8 tag)
{ {
struct kasan_track *alloc_track; struct kasan_track *alloc_track;
struct kasan_track *free_track; struct kasan_track *free_track;
alloc_track = kasan_get_alloc_track(cache, object); alloc_track = kasan_get_alloc_track(info->cache, info->object);
if (alloc_track) { if (alloc_track) {
print_track(alloc_track, "Allocated"); print_track(alloc_track, "Allocated");
pr_err("\n"); pr_err("\n");
} }
free_track = kasan_get_free_track(cache, object, tag); free_track = kasan_get_free_track(info->cache, info->object, tag);
if (free_track) { if (free_track) {
print_track(free_track, "Freed"); print_track(free_track, "Freed");
pr_err("\n"); pr_err("\n");
} }
kasan_print_aux_stacks(cache, object); kasan_print_aux_stacks(info->cache, info->object);
} }
static void describe_object(struct kmem_cache *cache, void *object, static void describe_object(const void *addr, u8 tag,
const void *addr, u8 tag) struct kasan_report_info *info)
{ {
if (kasan_stack_collection_enabled()) if (kasan_stack_collection_enabled())
describe_object_stacks(cache, object, addr, tag); describe_object_stacks(tag, info);
describe_object_addr(cache, object, addr); describe_object_addr(addr, info->cache, info->object);
} }
static inline bool kernel_or_module_addr(const void *addr) static inline bool kernel_or_module_addr(const void *addr)
...@@ -296,7 +295,7 @@ static void print_address_description(void *addr, u8 tag, ...@@ -296,7 +295,7 @@ static void print_address_description(void *addr, u8 tag,
pr_err("\n"); pr_err("\n");
if (info->cache && info->object) { if (info->cache && info->object) {
describe_object(info->cache, info->object, addr, tag); describe_object(addr, tag, info);
pr_err("\n"); pr_err("\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment