From: Fidal palamparambil <rootuserh...@gmail.com> This commit addresses several bugs and potential issues in the trace_printk module format handling code:
1. Memory leak fix: In hold_module_trace_bprintk_format(), ensure proper cleanup when format string allocation fails by setting tb_fmt to NULL after freeing it to prevent memory leaks. 2. NULL pointer dereference prevention: Added comprehensive NULL checks in t_show() function before dereferencing format pointers to prevent kernel crashes. 3. Input validation: Added NULL check in trace_is_tracepoint_string() to prevent potential NULL pointer dereference when called with invalid input. 4. Type safety: Fixed type casting in t_show() to use proper unsigned long casting for pointer arithmetic, ensuring correct pointer handling across different architectures. 5. Error handling: Fixed type mismatch in init_trace_printk_function_export() by properly handling struct dentry pointer return from tracing_init_dentry() and using IS_ERR_OR_NULL() for comprehensive error checking. 6. Code robustness: Added additional pointer validation throughout the code to handle potential edge cases and improve overall stability. 7. Memory safety: Ensured consistent handling of format pointers when memory allocation failures occur, preventing use-after-free and other memory corruption issues. These fixes improve the stability and reliability of the trace_printk infrastructure, particularly when dealing with module loading/unloading and format string management. Reported-by : kernel test robot <l...@intel.com> Closes : https://lore.kernel.org/oe-kbuild-all/202509071540.gtxwwstz-...@intel.com/ Signed-off-by: Fidal palamparambil <rootuserh...@gmail.com> --- kernel/trace/trace_printk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c index cb962c6c02f8..665effbf50ae 100644 --- a/kernel/trace/trace_printk.c +++ b/kernel/trace/trace_printk.c @@ -386,7 +386,7 @@ static __init int init_trace_printk_function_export(void) struct dentry *dentry; dentry = tracing_init_dentry(); - if (IS_ERR(dentry)) + if (IS_ERR_OR_NULL(dentry)) return 0; trace_create_file("printk_formats", TRACE_MODE_READ, NULL, -- 2.50.1.windows.1