|
@@ -164,14 +164,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
|
|
|
+ * access kasan mapping for the passed address.
|
|
|
+ */
|
|
|
kasan_disable_current();
|
|
|
+ memcpy(shadow_buf, shadow_row, SHADOW_BYTES_PER_ROW);
|
|
|
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))
|