public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [for-linus][PATCH v2 0/2] tracing: A couple of fixes for v6.18
@ 2025-10-11 19:42 Steven Rostedt
  2025-10-11 19:42 ` [for-linus][PATCH v2 1/2] tracing: Fix tracing_mark_raw_write() to use buf and not ubuf Steven Rostedt
  2025-10-11 19:42 ` [for-linus][PATCH v2 2/2] tracing: Stop fortify-string from warning in tracing_mark_raw_write() Steven Rostedt
  0 siblings, 2 replies; 3+ messages in thread
From: Steven Rostedt @ 2025-10-11 19:42 UTC (permalink / raw)
  To: linux-kernel
  Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton

tracing fixes for v6.18:

The previous fix to trace_marker required updating trace_marker_raw
as well. The difference between trace_marker_raw from trace_marker
is that the raw version is for applications to write binary structures
directly into the ring buffer instead of writing ASCII strings.
This is for applications that will read the raw data from the ring
buffer and get the data structures directly. It's a bit quicker than
using the ASCII version.

Unfortunately, it appears that our test suite has several tests that
test writes to the trace_marker file, but lacks any tests to the
trace_marker_raw file (this needs to be remedied). Two issues came
about the update to the trace_marker_raw file that syzbot found:

- Fix tracing_mark_raw_write() to use per CPU buffer

  The fix to use the per CPU buffer to copy from user space was needed for
  both the trace_maker and trace_maker_raw file.

  The fix for reading from user space into per CPU buffers properly fixed
  the trace_marker write function, but the trace_marker_raw file wasn't
  fixed properly. The user space data was correctly written into the per CPU
  buffer, but the code that wrote into the ring buffer still used the user
  space pointer and not the per CPU buffer that had the user space data
  already written.

- Stop the fortify string warning from writing into trace_marker_raw

  After converting the copy_from_user_nofault() into a memcpy(), another
  issue appeared. As writes to the trace_marker_raw expects binary data, the
  first entry is a 4 byte identifier. The entry structure is defined as:

  struct {
	struct trace_entry ent;
	int id;
	char buf[];
  };

  The size of this structure is reserved on the ring buffer with:

    size = sizeof(*entry) + cnt;

  Then it is copied from the buffer into the ring buffer with:

    memcpy(&entry->id, buf, cnt);

  This use to be a copy_from_user_nofault(), but now converting it to
  a memcpy() triggers the fortify-string code, and causes a warning.

  The allocated space is actually more than what is copied, as the cnt
  used also includes the entry->id portion. Allocating sizeof(*entry)
  plus cnt is actually allocating 4 bytes more than what is needed.

  Change the size function to:

    size = struct_size(entry, buf, cnt - sizeof(entry->id));

  And update the memcpy() to unsafe_memcpy().


  git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace/fixes

Head SHA1: 54b91e54b113d4f15ab023a44f508251db6e22e7


Steven Rostedt (2):
      tracing: Fix tracing_mark_raw_write() to use buf and not ubuf
      tracing: Stop fortify-string from warning in tracing_mark_raw_write()

----
 kernel/trace/trace.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-10-11 19:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-11 19:42 [for-linus][PATCH v2 0/2] tracing: A couple of fixes for v6.18 Steven Rostedt
2025-10-11 19:42 ` [for-linus][PATCH v2 1/2] tracing: Fix tracing_mark_raw_write() to use buf and not ubuf Steven Rostedt
2025-10-11 19:42 ` [for-linus][PATCH v2 2/2] tracing: Stop fortify-string from warning in tracing_mark_raw_write() Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox