summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (VMware) <rostedt@goodmis.org>2021-02-25 18:49:58 +0100
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2021-02-25 18:49:58 +0100
commitd814567942ff6ac73869052bdb8ca911364e5eb0 (patch)
treeb6bc74d8536cacfc502403a1417f7c0673b11104
parentmm, tracing: record slab name for kmem_cache_free() (diff)
downloadlinux-d814567942ff6ac73869052bdb8ca911364e5eb0.tar.xz
linux-d814567942ff6ac73869052bdb8ca911364e5eb0.zip
mm, tracing: Fix kmem_cache_free trace event to not print stale pointers
The update to kmem_cache_free trace event added printing of the slab name in the trace event. But it only stores the pointer of the name which will be printed as a string when the event is read some time in the future. This is dangerous because the name could be freed in the mean time and when reading the trace event it would try to dereference the string name by the pointer to the name that has been freed. Instead, use the trace event helper macros __string(), __assign_str(), and __get_str() that are for this very case. Cc: Jacob Wen <jian.w.wen@oracle.com> Fixes: 3544de8ee6e4 ("mm, tracing: record slab name for kmem_cache_free()") Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r--include/trace/events/kmem.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
index 40845b0d5dad..3a60b6b6db32 100644
--- a/include/trace/events/kmem.h
+++ b/include/trace/events/kmem.h
@@ -144,17 +144,17 @@ TRACE_EVENT(kmem_cache_free,
TP_STRUCT__entry(
__field( unsigned long, call_site )
__field( const void *, ptr )
- __field( const char *, name )
+ __string( name, name )
),
TP_fast_assign(
__entry->call_site = call_site;
__entry->ptr = ptr;
- __entry->name = name;
+ __assign_str(name, name);
),
TP_printk("call_site=%pS ptr=%p name=%s",
- (void *)__entry->call_site, __entry->ptr, __entry->name)
+ (void *)__entry->call_site, __entry->ptr, __get_str(name))
);
TRACE_EVENT(mm_page_free,