From: Steven Rostedt <[email protected]>

The structure ftrace_func_mapper only contains a single field and that is
a ftrace_hash. It is used to abstract it out from a normal hash to control
users of how it gets modified.

The freeing of a ftrace_func_mapper structure is:

  free_ftrace_hash(&mapper->hash);

Without context, this looks like a bug. It should be commented that it is
not a bug and it is freed this way.

Signed-off-by: Steven Rostedt (Google) <[email protected]>
---
 kernel/trace/ftrace.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index a8a02868b435..19b902b8de2b 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5160,8 +5160,12 @@ struct ftrace_func_map {
        void                            *data;
 };
 
+/*
+ * Note, ftrace_func_mapper is freed by free_ftrace_hash(&mapper->hash).
+ * The hash field must be the first field.
+ */
 struct ftrace_func_mapper {
-       struct ftrace_hash              hash;
+       struct ftrace_hash              hash;   /* Must be first! */
 };
 
 /**
@@ -5296,6 +5300,7 @@ void free_ftrace_func_mapper(struct ftrace_func_mapper 
*mapper,
                        }
                }
        }
+       /* This also frees the mapper itself */
        free_ftrace_hash(&mapper->hash);
 }
 
-- 
2.47.2


Reply via email to