mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
mm, kfence: support kmem_dump_obj() for KFENCE objects
Calling kmem_obj_info() via kmem_dump_obj() on KFENCE objects has been producing garbage data due to the object not actually being maintained by SLAB or SLUB. Fix this by implementing __kfence_obj_info() that copies relevant information to struct kmem_obj_info when the object was allocated by KFENCE; this is called by a common kmem_obj_info(), which also calls the slab/slub/slob specific variant now called __kmem_obj_info(). For completeness, kmem_dump_obj() now displays if the object was allocated by KFENCE. Link: https://lore.kernel.org/all/20220323090520.GG16885@xsang-OptiPlex-9020/ Link: https://lkml.kernel.org/r/20220406131558.3558585-1-elver@google.com Fixes:b89fb5ef0c
("mm, kfence: insert KFENCE hooks for SLUB") Fixes:d3fb45f370
("mm, kfence: insert KFENCE hooks for SLAB") Signed-off-by: Marco Elver <elver@google.com> Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Reported-by: kernel test robot <oliver.sang@intel.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> [slab] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
b1add418d4
commit
2dfe63e61c
@@ -204,6 +204,22 @@ static __always_inline __must_check bool kfence_free(void *addr)
|
||||
*/
|
||||
bool __must_check kfence_handle_page_fault(unsigned long addr, bool is_write, struct pt_regs *regs);
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
struct kmem_obj_info;
|
||||
/**
|
||||
* __kfence_obj_info() - fill kmem_obj_info struct
|
||||
* @kpp: kmem_obj_info to be filled
|
||||
* @object: the object
|
||||
*
|
||||
* Return:
|
||||
* * false - not a KFENCE object
|
||||
* * true - a KFENCE object, filled @kpp
|
||||
*
|
||||
* Copies information to @kpp for KFENCE objects.
|
||||
*/
|
||||
bool __kfence_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab);
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_KFENCE */
|
||||
|
||||
static inline bool is_kfence_address(const void *addr) { return false; }
|
||||
@@ -221,6 +237,14 @@ static inline bool __must_check kfence_handle_page_fault(unsigned long addr, boo
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
struct kmem_obj_info;
|
||||
static inline bool __kfence_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_KFENCE_H */
|
||||
|
Reference in New Issue
Block a user