Re: [PATCH V2 04/10] kasan: Don't use kasan shadow pointer in generic functions
From: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Date: 2015-08-27 09:42:40
Also in:
lkml
2015-08-26 11:54 GMT+03:00 Aneesh Kumar K.V [off-list ref]:
quoted hunk ↗ jump to hunk
Missed to cherry-pick the updated version of this patch, before sending the series out. commit aeb324e09d95c189eda4ce03790da94b535d1dfc Author: Aneesh Kumar K.V [off-list ref] Date: Fri Aug 14 12:28:58 2015 +0530 kasan: Don't use kasan shadow pointer in generic functions We can't use generic functions like print_hex_dump to access kasan shadow region. This require us to setup another kasan shadow region for the address passed (kasan shadow address). Most architecture won't be able to do that. Hence make a copy of the shadow region row and pass that to generic functions. Signed-off-by: Aneesh Kumar K.V [off-list ref]diff --git a/mm/kasan/report.c b/mm/kasan/report.c index d19d01823a68..60fdb0413f3b 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c@@ -166,14 +166,20 @@ static void print_shadow_for_address(const void *addr) for (i = -SHADOW_ROWS_AROUND_ADDR; i <= SHADOW_ROWS_AROUND_ADDR; i++) { const void *kaddr = kasan_shadow_to_mem(shadow_row); char buffer[4 + (BITS_PER_LONG/8)*2]; + char shadow_buf[SHADOW_BYTES_PER_ROW]; snprintf(buffer, sizeof(buffer), (i == 0) ? ">%p: " : " %p: ", kaddr); - + /* + * We should not pass a shadow pointer to generic + * function, because generic functions may try to + * kasan mapping for the passed address.
may try to *access* kasan mapping?
+ */
+ memcpy(shadow_buf, shadow_row, SHADOW_BYTES_PER_ROW);
kasan_disable_current();
print_hex_dump(KERN_ERR, buffer,
DUMP_PREFIX_NONE, SHADOW_BYTES_PER_ROW, 1,
- shadow_row, SHADOW_BYTES_PER_ROW, 0);
+ shadow_buf, SHADOW_BYTES_PER_ROW, 0);
kasan_enable_current();
if (row_is_guilty(shadow_row, shadow))