I'm seeing problems like this with syzkaller from time to time, but I never managed to reproduce those. Do you have a reliable reproducer?
Please note that according to the report the allocated chunk is in the KASAN_STATE_ALLOC state (see kasan_object_err() in mm/kasan/report.c)
On the other hand, the shadow memory is in the KASAN_KMALLOC_FREE state, because the bug has been classified as a use-after-free.
That said, for some reason the shadow memory value and the chunk state are inconsistent.
Since we're on x86, it's quite unlikely that the assignment to the chunk state has been reordered with the assignment to the shadow byte.
Dmitry's guess is that in kasan_slab_free(), between quarantine_put() and kasan_poison_slab_free(), the quarantine was drained, and another thread took our memory chunk.
This sounds really probable, as quarantine isn't really that big (1/32 of the available physical memory, minus 1Mb for each CPU).
Vegard