mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	slab: prevent warnings when slab obj_exts vector allocation fails
When object extension vector allocation fails, we set slab->obj_exts to
OBJEXTS_ALLOC_FAIL to indicate the failure. Later, once the vector is
successfully allocated, we will use this flag to mark codetag references
stored in that vector as empty to avoid codetag warnings.
slab_obj_exts() used to retrieve the slab->obj_exts vector pointer checks
slab->obj_exts for being either NULL or a pointer with MEMCG_DATA_OBJEXTS
bit set. However it does not handle the case when slab->obj_exts equals
OBJEXTS_ALLOC_FAIL. Add the missing condition to avoid extra warning.
Fixes: 09c46563ff ("codetag: debug: introduce OBJEXTS_ALLOC_FAIL to mark failed slab_ext allocations")
Reported-by: Shakeel Butt <shakeel.butt@linux.dev>
Closes: https://lore.kernel.org/all/jftidhymri2af5u3xtcqry3cfu6aqzte3uzlznhlaylgrdztsi@5vpjnzpsemf5/
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Cc: stable@vger.kernel.org # v6.10+
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
			
			
This commit is contained in:
		
							parent
							
								
									3864e4d5a5
								
							
						
					
					
						commit
						4038016397
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		| 
						 | 
					@ -526,8 +526,12 @@ static inline struct slabobj_ext *slab_obj_exts(struct slab *slab)
 | 
				
			||||||
	unsigned long obj_exts = READ_ONCE(slab->obj_exts);
 | 
						unsigned long obj_exts = READ_ONCE(slab->obj_exts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_MEMCG
 | 
					#ifdef CONFIG_MEMCG
 | 
				
			||||||
	VM_BUG_ON_PAGE(obj_exts && !(obj_exts & MEMCG_DATA_OBJEXTS),
 | 
						/*
 | 
				
			||||||
							slab_page(slab));
 | 
						 * obj_exts should be either NULL, a valid pointer with
 | 
				
			||||||
 | 
						 * MEMCG_DATA_OBJEXTS bit set or be equal to OBJEXTS_ALLOC_FAIL.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						VM_BUG_ON_PAGE(obj_exts && !(obj_exts & MEMCG_DATA_OBJEXTS) &&
 | 
				
			||||||
 | 
							       obj_exts != OBJEXTS_ALLOC_FAIL, slab_page(slab));
 | 
				
			||||||
	VM_BUG_ON_PAGE(obj_exts & MEMCG_DATA_KMEM, slab_page(slab));
 | 
						VM_BUG_ON_PAGE(obj_exts & MEMCG_DATA_KMEM, slab_page(slab));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	return (struct slabobj_ext *)(obj_exts & ~OBJEXTS_FLAGS_MASK);
 | 
						return (struct slabobj_ext *)(obj_exts & ~OBJEXTS_FLAGS_MASK);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue