ANDROID: mm/slub: Fix Kasan issue with get_each_kmemcache_object

In get_each_kmemcache_object  we go through meta data of the slab
object in function(fn), and as a result false postive out-of-bound
access is reported by kasan. Fix this by wrapping that function call
with metadata_access_enable/disable.

Bug: 222651868
Fixes: I8b920f6bd770 ("ANDROID: mm: Add helper function to iterate over slab objects")
Change-Id: Ifb4241a9c3e397a52759d467aa267d1297e297dd
Signed-off-by: Vijayanand Jitta <quic_vjitta@quicinc.com>
Signed-off-by: Oreoluwa Babatunde <quic_obabatun@quicinc.com>
This commit is contained in:
Vijayanand Jitta
2022-03-04 19:49:08 +05:30
committed by Treehugger Robot
parent f29b86d677
commit 0e59ec369e
+4
View File
@@ -940,7 +940,9 @@ unsigned long get_each_kmemcache_object(struct kmem_cache *s,
spin_lock_irqsave(&n->list_lock, flags);
list_for_each_entry(slab, &n->partial, slab_list) {
for_each_object(p, s, slab_address(slab), slab->objects) {
metadata_access_enable();
ret = fn(s, p, private);
metadata_access_disable();
if (ret) {
spin_unlock_irqrestore(&n->list_lock, flags);
return ret;
@@ -950,7 +952,9 @@ unsigned long get_each_kmemcache_object(struct kmem_cache *s,
#ifdef CONFIG_SLUB_DEBUG
list_for_each_entry(slab, &n->full, slab_list) {
for_each_object(p, s, slab_address(slab), slab->objects) {
metadata_access_enable();
ret = fn(s, p, private);
metadata_access_disable();
if (ret) {
spin_unlock_irqrestore(&n->list_lock, flags);
return ret;