summaryrefslogtreecommitdiffstats
path: root/mm/kasan/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/kasan/common.c')
-rw-r--r--mm/kasan/common.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/mm/kasan/common.c b/mm/kasan/common.c
index 6b6f1198c72b..307631d9c62b 100644
--- a/mm/kasan/common.c
+++ b/mm/kasan/common.c
@@ -338,8 +338,7 @@ void kasan_poison_slab(struct page *page)
338 338
339 for (i = 0; i < (1 << compound_order(page)); i++) 339 for (i = 0; i < (1 << compound_order(page)); i++)
340 page_kasan_tag_reset(page + i); 340 page_kasan_tag_reset(page + i);
341 kasan_poison_shadow(page_address(page), 341 kasan_poison_shadow(page_address(page), page_size(page),
342 PAGE_SIZE << compound_order(page),
343 KASAN_KMALLOC_REDZONE); 342 KASAN_KMALLOC_REDZONE);
344} 343}
345 344
@@ -542,7 +541,7 @@ void * __must_check kasan_kmalloc_large(const void *ptr, size_t size,
542 page = virt_to_page(ptr); 541 page = virt_to_page(ptr);
543 redzone_start = round_up((unsigned long)(ptr + size), 542 redzone_start = round_up((unsigned long)(ptr + size),
544 KASAN_SHADOW_SCALE_SIZE); 543 KASAN_SHADOW_SCALE_SIZE);
545 redzone_end = (unsigned long)ptr + (PAGE_SIZE << compound_order(page)); 544 redzone_end = (unsigned long)ptr + page_size(page);
546 545
547 kasan_unpoison_shadow(ptr, size); 546 kasan_unpoison_shadow(ptr, size);
548 kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start, 547 kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start,
@@ -578,8 +577,7 @@ void kasan_poison_kfree(void *ptr, unsigned long ip)
578 kasan_report_invalid_free(ptr, ip); 577 kasan_report_invalid_free(ptr, ip);
579 return; 578 return;
580 } 579 }
581 kasan_poison_shadow(ptr, PAGE_SIZE << compound_order(page), 580 kasan_poison_shadow(ptr, page_size(page), KASAN_FREE_PAGE);
582 KASAN_FREE_PAGE);
583 } else { 581 } else {
584 __kasan_slab_free(page->slab_cache, ptr, ip, false); 582 __kasan_slab_free(page->slab_cache, ptr, ip, false);
585 } 583 }