FAILED: patch "[PATCH] tracing: Have event format check not flag %p* on" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 499f12168aebd6da8fa32c9b7d6203ca9b5eb88d Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (Google)" <[email protected]>
Date: Thu, 7 Apr 2022 14:56:32 -0400
Subject: [PATCH] tracing: Have event format check not flag %p* on
__get_dynamic_array()
The print fmt check against trace events to make sure that the format does not use pointers that may be freed from the time of the trace to the time the event is read, gives a false positive on %pISpc when reading data that was saved in __get_dynamic_array() when it is perfectly fine to do so, as the data being read is on the ring buffer.
kernel/trace/trace_events.c +7 -6
@@ -392,12 +392,6 @@ 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->" );
@@ -413,7 +407,14 @@ static void test_event_printk(struct trace_event_call *call) a =strchr (fmt + i,'&' );if ((a && (a < r)) ||test_field (r, call)) dereference_flags &= ~(1ULL << arg); + }else if ((r =strstr (fmt + i,"__get_dynamic_array(" )) && + (!c || r < c)) { + dereference_flags &= ~(1ULL << arg); + }else if ((r =strstr (fmt + i,"__get_sockaddr(" )) && + (!c || r < c)) { + dereference_flags &= ~(1ULL << arg); } + next_arg: i--; arg++;