diff -drupN a/mm/slab_common.c b/mm/slab_common.c
--- a/mm/slab_common.c	2018-08-06 17:23:04.000000000 +0300
+++ b/mm/slab_common.c	2022-06-12 05:28:14.000000000 +0300
@@ -458,6 +458,9 @@ EXPORT_SYMBOL(kmem_cache_create);
 static int shutdown_cache(struct kmem_cache *s,
 		struct list_head *release, bool *need_rcu_barrier)
 {
+	/* free asan quarantined objects */
+	kasan_cache_shutdown(s);
+
 	if (__kmem_cache_shutdown(s) != 0)
 		return -EBUSY;
 
@@ -741,7 +744,6 @@ void kmem_cache_destroy(struct kmem_cach
 	get_online_cpus();
 	get_online_mems();
 
-	kasan_cache_destroy(s);
 	mutex_lock(&slab_mutex);
 
 	s->refcount--;