tracing: Update print fmt check to handle new __get_sockaddr() macro
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Tue, 25 Jan 2022 15:44:08 +0000 (10:44 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 28 Feb 2022 15:26:38 +0000 (10:26 -0500)
A helper macro was added to make reading socket addresses easier in trace
events. It pairs %pISpc with __get_sockaddr() that reads the socket
address from the ring buffer into a human readable format.

The boot up check that makes sure that trace events do not reference
pointers to memory that can later be freed when the trace event is read,
incorrectly flagged this as a delayed reference. Update the check to
handle "__get_sockaddr" and not report an error on it.

Link: https://lore.kernel.org/all/20220125160505.068dbb52@canb.auug.org.au/
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
kernel/trace/trace_events.c

index 3147614c1812a16293b0abd47dca1f8f00113b49..f527ae807e77d5e0203a08192126b90960b2624d 100644 (file)
@@ -384,6 +384,12 @@ static void test_event_printk(struct trace_event_call *call)
                        if (!(dereference_flags & (1ULL << arg)))
                                goto next_arg;
 
+                       /* Check for __get_sockaddr */;
+                       if (str_has_prefix(fmt + i, "__get_sockaddr(")) {
+                               dereference_flags &= ~(1ULL << arg);
+                               goto next_arg;
+                       }
+
                        /* Find the REC-> in the argument */
                        c = strchr(fmt + i, ',');
                        r = strstr(fmt + i, "REC->");