kasan: rename get_alloc/free_info
Rename get_alloc_info() and get_free_info() to kasan_get_alloc_meta() and kasan_get_free_meta() to better reflect what those do and avoid confusion with kasan_set_free_info(). No functional changes. Link: https://lkml.kernel.org/r/27b7c036b754af15a2839e945f6d8bfce32b4c2f.1606162397.git.andreyknvl@google.com Link: https://linux-review.googlesource.com/id/Ib6e4ba61c8b12112b403d3479a9799ac8fff8de1 Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Marco Elver <elver@google.com> Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com> Cc: Alexander Potapenko <glider@google.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Branislav Rankov <Branislav.Rankov@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Evgenii Stepanov <eugenis@google.com> Cc: Kevin Brodsky <kevin.brodsky@arm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
c696de9f12
Коммит
6476792f10
|
@ -180,14 +180,14 @@ size_t kasan_metadata_size(struct kmem_cache *cache)
|
||||||
sizeof(struct kasan_free_meta) : 0);
|
sizeof(struct kasan_free_meta) : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kasan_alloc_meta *get_alloc_info(struct kmem_cache *cache,
|
struct kasan_alloc_meta *kasan_get_alloc_meta(struct kmem_cache *cache,
|
||||||
const void *object)
|
const void *object)
|
||||||
{
|
{
|
||||||
return (void *)reset_tag(object) + cache->kasan_info.alloc_meta_offset;
|
return (void *)reset_tag(object) + cache->kasan_info.alloc_meta_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kasan_free_meta *get_free_info(struct kmem_cache *cache,
|
struct kasan_free_meta *kasan_get_free_meta(struct kmem_cache *cache,
|
||||||
const void *object)
|
const void *object)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(sizeof(struct kasan_free_meta) > 32);
|
BUILD_BUG_ON(sizeof(struct kasan_free_meta) > 32);
|
||||||
return (void *)reset_tag(object) + cache->kasan_info.free_meta_offset;
|
return (void *)reset_tag(object) + cache->kasan_info.free_meta_offset;
|
||||||
|
@ -264,13 +264,13 @@ static u8 assign_tag(struct kmem_cache *cache, const void *object,
|
||||||
void * __must_check kasan_init_slab_obj(struct kmem_cache *cache,
|
void * __must_check kasan_init_slab_obj(struct kmem_cache *cache,
|
||||||
const void *object)
|
const void *object)
|
||||||
{
|
{
|
||||||
struct kasan_alloc_meta *alloc_info;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
|
|
||||||
if (!(cache->flags & SLAB_KASAN))
|
if (!(cache->flags & SLAB_KASAN))
|
||||||
return (void *)object;
|
return (void *)object;
|
||||||
|
|
||||||
alloc_info = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
__memset(alloc_info, 0, sizeof(*alloc_info));
|
__memset(alloc_meta, 0, sizeof(*alloc_meta));
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_KASAN_SW_TAGS) || IS_ENABLED(CONFIG_KASAN_HW_TAGS))
|
if (IS_ENABLED(CONFIG_KASAN_SW_TAGS) || IS_ENABLED(CONFIG_KASAN_HW_TAGS))
|
||||||
object = set_tag(object, assign_tag(cache, object, true, false));
|
object = set_tag(object, assign_tag(cache, object, true, false));
|
||||||
|
@ -350,7 +350,7 @@ static void *__kasan_kmalloc(struct kmem_cache *cache, const void *object,
|
||||||
KASAN_KMALLOC_REDZONE);
|
KASAN_KMALLOC_REDZONE);
|
||||||
|
|
||||||
if (cache->flags & SLAB_KASAN)
|
if (cache->flags & SLAB_KASAN)
|
||||||
kasan_set_track(&get_alloc_info(cache, object)->alloc_track, flags);
|
kasan_set_track(&kasan_get_alloc_meta(cache, object)->alloc_track, flags);
|
||||||
|
|
||||||
return set_tag(object, tag);
|
return set_tag(object, tag);
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,7 +328,7 @@ void kasan_record_aux_stack(void *addr)
|
||||||
{
|
{
|
||||||
struct page *page = kasan_addr_to_page(addr);
|
struct page *page = kasan_addr_to_page(addr);
|
||||||
struct kmem_cache *cache;
|
struct kmem_cache *cache;
|
||||||
struct kasan_alloc_meta *alloc_info;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
void *object;
|
void *object;
|
||||||
|
|
||||||
if (!(page && PageSlab(page)))
|
if (!(page && PageSlab(page)))
|
||||||
|
@ -336,10 +336,10 @@ void kasan_record_aux_stack(void *addr)
|
||||||
|
|
||||||
cache = page->slab_cache;
|
cache = page->slab_cache;
|
||||||
object = nearest_obj(cache, page, addr);
|
object = nearest_obj(cache, page, addr);
|
||||||
alloc_info = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
|
|
||||||
alloc_info->aux_stack[1] = alloc_info->aux_stack[0];
|
alloc_meta->aux_stack[1] = alloc_meta->aux_stack[0];
|
||||||
alloc_info->aux_stack[0] = kasan_save_stack(GFP_NOWAIT);
|
alloc_meta->aux_stack[0] = kasan_save_stack(GFP_NOWAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kasan_set_free_info(struct kmem_cache *cache,
|
void kasan_set_free_info(struct kmem_cache *cache,
|
||||||
|
@ -347,7 +347,7 @@ void kasan_set_free_info(struct kmem_cache *cache,
|
||||||
{
|
{
|
||||||
struct kasan_free_meta *free_meta;
|
struct kasan_free_meta *free_meta;
|
||||||
|
|
||||||
free_meta = get_free_info(cache, object);
|
free_meta = kasan_get_free_meta(cache, object);
|
||||||
kasan_set_track(&free_meta->free_track, GFP_NOWAIT);
|
kasan_set_track(&free_meta->free_track, GFP_NOWAIT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -361,5 +361,5 @@ struct kasan_track *kasan_get_free_track(struct kmem_cache *cache,
|
||||||
{
|
{
|
||||||
if (*(u8 *)kasan_mem_to_shadow(object) != KASAN_KMALLOC_FREETRACK)
|
if (*(u8 *)kasan_mem_to_shadow(object) != KASAN_KMALLOC_FREETRACK)
|
||||||
return NULL;
|
return NULL;
|
||||||
return &get_free_info(cache, object)->free_track;
|
return &kasan_get_free_meta(cache, object)->free_track;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ void kasan_set_free_info(struct kmem_cache *cache,
|
||||||
{
|
{
|
||||||
struct kasan_alloc_meta *alloc_meta;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
|
|
||||||
alloc_meta = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
kasan_set_track(&alloc_meta->free_track[0], GFP_NOWAIT);
|
kasan_set_track(&alloc_meta->free_track[0], GFP_NOWAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +75,6 @@ struct kasan_track *kasan_get_free_track(struct kmem_cache *cache,
|
||||||
{
|
{
|
||||||
struct kasan_alloc_meta *alloc_meta;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
|
|
||||||
alloc_meta = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
return &alloc_meta->free_track[0];
|
return &alloc_meta->free_track[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,10 +149,10 @@ struct kasan_free_meta {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kasan_alloc_meta *get_alloc_info(struct kmem_cache *cache,
|
struct kasan_alloc_meta *kasan_get_alloc_meta(struct kmem_cache *cache,
|
||||||
const void *object);
|
const void *object);
|
||||||
struct kasan_free_meta *get_free_info(struct kmem_cache *cache,
|
struct kasan_free_meta *kasan_get_free_meta(struct kmem_cache *cache,
|
||||||
const void *object);
|
const void *object);
|
||||||
|
|
||||||
void poison_range(const void *address, size_t size, u8 value);
|
void poison_range(const void *address, size_t size, u8 value);
|
||||||
void unpoison_range(const void *address, size_t size);
|
void unpoison_range(const void *address, size_t size);
|
||||||
|
|
|
@ -168,7 +168,7 @@ void quarantine_put(struct kmem_cache *cache, void *object)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct qlist_head *q;
|
struct qlist_head *q;
|
||||||
struct qlist_head temp = QLIST_INIT;
|
struct qlist_head temp = QLIST_INIT;
|
||||||
struct kasan_free_meta *info = get_free_info(cache, object);
|
struct kasan_free_meta *meta = kasan_get_free_meta(cache, object);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: irq must be disabled until after we move the batch to the
|
* Note: irq must be disabled until after we move the batch to the
|
||||||
|
@ -185,7 +185,7 @@ void quarantine_put(struct kmem_cache *cache, void *object)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qlist_put(q, &info->quarantine_link, cache->size);
|
qlist_put(q, &meta->quarantine_link, cache->size);
|
||||||
if (unlikely(q->bytes > QUARANTINE_PERCPU_SIZE)) {
|
if (unlikely(q->bytes > QUARANTINE_PERCPU_SIZE)) {
|
||||||
qlist_move_all(q, &temp);
|
qlist_move_all(q, &temp);
|
||||||
|
|
||||||
|
|
|
@ -164,12 +164,12 @@ static void describe_object_addr(struct kmem_cache *cache, void *object,
|
||||||
static void describe_object(struct kmem_cache *cache, void *object,
|
static void describe_object(struct kmem_cache *cache, void *object,
|
||||||
const void *addr, u8 tag)
|
const void *addr, u8 tag)
|
||||||
{
|
{
|
||||||
struct kasan_alloc_meta *alloc_info = get_alloc_info(cache, object);
|
struct kasan_alloc_meta *alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
|
|
||||||
if (cache->flags & SLAB_KASAN) {
|
if (cache->flags & SLAB_KASAN) {
|
||||||
struct kasan_track *free_track;
|
struct kasan_track *free_track;
|
||||||
|
|
||||||
print_track(&alloc_info->alloc_track, "Allocated");
|
print_track(&alloc_meta->alloc_track, "Allocated");
|
||||||
pr_err("\n");
|
pr_err("\n");
|
||||||
free_track = kasan_get_free_track(cache, object, tag);
|
free_track = kasan_get_free_track(cache, object, tag);
|
||||||
if (free_track) {
|
if (free_track) {
|
||||||
|
@ -178,14 +178,14 @@ static void describe_object(struct kmem_cache *cache, void *object,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_GENERIC
|
#ifdef CONFIG_KASAN_GENERIC
|
||||||
if (alloc_info->aux_stack[0]) {
|
if (alloc_meta->aux_stack[0]) {
|
||||||
pr_err("Last potentially related work creation:\n");
|
pr_err("Last potentially related work creation:\n");
|
||||||
print_stack(alloc_info->aux_stack[0]);
|
print_stack(alloc_meta->aux_stack[0]);
|
||||||
pr_err("\n");
|
pr_err("\n");
|
||||||
}
|
}
|
||||||
if (alloc_info->aux_stack[1]) {
|
if (alloc_meta->aux_stack[1]) {
|
||||||
pr_err("Second to last potentially related work creation:\n");
|
pr_err("Second to last potentially related work creation:\n");
|
||||||
print_stack(alloc_info->aux_stack[1]);
|
print_stack(alloc_meta->aux_stack[1]);
|
||||||
pr_err("\n");
|
pr_err("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -46,7 +46,7 @@ const char *get_bug_type(struct kasan_access_info *info)
|
||||||
if (page && PageSlab(page)) {
|
if (page && PageSlab(page)) {
|
||||||
cache = page->slab_cache;
|
cache = page->slab_cache;
|
||||||
object = nearest_obj(cache, page, (void *)addr);
|
object = nearest_obj(cache, page, (void *)addr);
|
||||||
alloc_meta = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
|
|
||||||
for (i = 0; i < KASAN_NR_FREE_STACKS; i++)
|
for (i = 0; i < KASAN_NR_FREE_STACKS; i++)
|
||||||
if (alloc_meta->free_pointer_tag[i] == tag)
|
if (alloc_meta->free_pointer_tag[i] == tag)
|
||||||
|
|
|
@ -174,7 +174,7 @@ void kasan_set_free_info(struct kmem_cache *cache,
|
||||||
struct kasan_alloc_meta *alloc_meta;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
u8 idx = 0;
|
u8 idx = 0;
|
||||||
|
|
||||||
alloc_meta = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS_IDENTIFY
|
#ifdef CONFIG_KASAN_SW_TAGS_IDENTIFY
|
||||||
idx = alloc_meta->free_track_idx;
|
idx = alloc_meta->free_track_idx;
|
||||||
|
@ -191,7 +191,7 @@ struct kasan_track *kasan_get_free_track(struct kmem_cache *cache,
|
||||||
struct kasan_alloc_meta *alloc_meta;
|
struct kasan_alloc_meta *alloc_meta;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
alloc_meta = get_alloc_info(cache, object);
|
alloc_meta = kasan_get_alloc_meta(cache, object);
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS_IDENTIFY
|
#ifdef CONFIG_KASAN_SW_TAGS_IDENTIFY
|
||||||
for (i = 0; i < KASAN_NR_FREE_STACKS; i++) {
|
for (i = 0; i < KASAN_NR_FREE_STACKS; i++) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче