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))