All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Brian Foster <bfoster@redhat.com>
Subject: [GIT PULL] tracing: Have trace event string test handle zero length strings
Date: Thu, 24 Mar 2022 19:03:39 -0400	[thread overview]
Message-ID: <20220324190339.399932f7@gandalf.local.home> (raw)



Linus,

Trace event fix of string verifier

- The run time string verifier that checks all trace event formats
  as they are read from the tracing file to make sure that the %s
  pointers are not reading something that no longer exists, failed
  to account for %*.s where the length given is zero, and the string
  is NULL. It incorrectly flagged it as a null pointer dereference and
  gave a WARN_ON().


Please pull the latest trace-v5.18-1 tree, which can be found at:


  git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
trace-v5.18-1

Tag SHA1: 2eb99512607710b43f383ddd44fd009827c8460e
Head SHA1: eca344a7362e0f34f179298fd8366bcd556eede1


Steven Rostedt (Google) (1):
      tracing: Have trace event string test handle zero length strings

----
 kernel/trace/trace.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
---------------------------
commit eca344a7362e0f34f179298fd8366bcd556eede1
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Wed Mar 23 10:32:51 2022 -0400

    tracing: Have trace event string test handle zero length strings
    
    If a trace event has in its TP_printk():
    
     "%*.s", len, len ? __get_str(string) : NULL
    
    It is perfectly valid if len is zero and passing in the NULL.
    Unfortunately, the runtime string check at time of reading the trace sees
    the NULL and flags it as a bad string and produces a WARN_ON().
    
    Handle this case by passing into the test function if the format has an
    asterisk (star) and if so, if the length is zero, then mark it as safe.
    
    Link: https://lore.kernel.org/all/YjsWzuw5FbWPrdqq@bfoster/
    
    Cc: stable@vger.kernel.org
    Reported-by: Brian Foster <bfoster@redhat.com>
    Tested-by: Brian Foster <bfoster@redhat.com>
    Fixes: 9a6944fee68e2 ("tracing: Add a verifier to check string pointers for trace events")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index eb44418574f9..96265a717ca4 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3663,12 +3663,17 @@ static char *trace_iter_expand_format(struct trace_iterator *iter)
 }
 
 /* Returns true if the string is safe to dereference from an event */
-static bool trace_safe_str(struct trace_iterator *iter, const char *str)
+static bool trace_safe_str(struct trace_iterator *iter, const char *str,
+			   bool star, int len)
 {
 	unsigned long addr = (unsigned long)str;
 	struct trace_event *trace_event;
 	struct trace_event_call *event;
 
+	/* Ignore strings with no length */
+	if (star && !len)
+		return true;
+
 	/* OK if part of the event data */
 	if ((addr >= (unsigned long)iter->ent) &&
 	    (addr < (unsigned long)iter->ent + iter->ent_size))
@@ -3854,7 +3859,7 @@ void trace_check_vprintf(struct trace_iterator *iter, const char *fmt,
 		 * instead. See samples/trace_events/trace-events-sample.h
 		 * for reference.
 		 */
-		if (WARN_ONCE(!trace_safe_str(iter, str),
+		if (WARN_ONCE(!trace_safe_str(iter, str, star, len),
 			      "fmt: '%s' current_buffer: '%s'",
 			      fmt, show_buffer(&iter->seq))) {
 			int ret;

             reply	other threads:[~2022-03-24 23:03 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-24 23:03 Steven Rostedt [this message]
2022-03-26 22:38 ` [GIT PULL] tracing: Have trace event string test handle zero length strings pr-tracker-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220324190339.399932f7@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=bfoster@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.