lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250529094122.245fb887@gandalf.local.home>
Date: Thu, 29 May 2025 09:41:22 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: LKML <linux-kernel@...r.kernel.org>, Masami Hiramatsu
 <mhiramat@...nel.org>, Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
 Mark Rutland <mark.rutland@....com>, Andrew Morton
 <akpm@...ux-foundation.org>, Devaansh Kumar <devaanshk840@...il.com>, Ilya
 Leoshkevich <iii@...ux.ibm.com>, Miaoqian Lin <linmq006@...il.com>, Pan
 Taixi <pantaixi@...weicloud.com>, Tomas Glozar <tglozar@...hat.com>, Yury
 Norov <yury.norov@...il.com>
Subject: [GIT PULL] tracing: Updates for v6.16


Linus,

[
  Note, this has a small merge conflict with include/trace/events/tcp.h
  which should have:

 -DECLARE_TRACE(tcp_cwnd_reduction_tp,
 +DECLARE_TRACE(tcp_cwnd_reduction,

 As this series makes DECLARE_TRACE() always add the "_tp" suffix.
]

tracing updates for v6.16:

- Have module addresses get updated in the persistent ring buffer

  The addresses of the modules from the previous boot are saved in the
  persistent ring buffer. If the same modules are loaded and an address is
  in the old buffer points to an address that was both saved in the
  persistent ring buffer and is loaded in memory, shift the address to point
  to the address that is loaded in memory in the trace event.

- Print function names for irqs off and preempt off callsites

  When ignoring the print fmt of a trace event and just printing the fields
  directly, have the fields for preempt off and irqs off events still show
  the function name (via kallsyms) instead of just showing the raw address.

- Clean ups of the histogram code

  The histogram functions saved over 800 bytes on the stack to process
  events as they come in. Instead, create per-cpu buffers that can hold this
  information and have a separate location for each context level (thread,
  softirq, IRQ and NMI).

  Also add some more comments to the code.

- Add "common_comm" field for histograms

  Add "common_comm" that uses the current->comm as a field in an event
  histogram and acts like any of the other fields of the event.

- Show "subops" in the enabled_functions file

  When the function graph infrastructure is used, a subsystem has a "subops"
  that it attaches its callback function to. Instead of the
  enabled_functions just showing a function calling the function that calls
  the subops functions, also show the subops functions that will get called
  for that function too.

- Add "copy_trace_marker" option to instances

  There are cases where an instance is created for tooling to write into,
  but the old tooling has the top level instance hardcoded into the
  application. New tools want to consume the data from an instance and not
  the top level buffer. By adding a copy_trace_marker option, whenever the
  top instance trace_marker is written into, a copy of it is also written
  into the instance with this option set. This allows new tools to read what
  old tools are writing into the top buffer.

  If this option is cleared by the top instance, then what is written into
  the trace_marker is not written into the top instance. This is a way to
  redirect the trace_marker writes into another instance.

- Have tracepoints created by DECLARE_TRACE() use trace_<name>_tp()

  If a tracepoint is created by DECLARE_TRACE() instead of TRACE_EVENT(),
  then it will not be exposed via tracefs. Currently there's no way to
  differentiate in the kernel the tracepoint functions between those that
  are exposed via tracefs or not. A calling convention has been made
  manually to append a "_tp" prefix for events created by DECLARE_TRACE().
  Instead of doing this manually, force it so that all DECLARE_TRACE()
  events have this notation.

- Use __string() for task->comm in some sched events

  Instead of hardcoding the comm to be TASK_COMM_LEN in some of the
  scheduler events use __string() which makes it dynamic. Note, if these
  events are parsed by user space it they may break, and the event may have
  to be converted back to the hardcoded size.

- Have function graph "depth" be unsigned to the user

  Internally to the kernel, the "depth" field of the function graph event is
  signed due to -1 being used for end of boundary. What actually gets
  recorded in the event itself is zero or positive. Reflect this to user
  space by showing "depth" as unsigned int and be consistent across all
  events.

- Allow an arbitrary long CPU string to osnoise_cpus_write()

  The filtering of which CPUs to write to can exceed 256 bytes. If a machine
  has 256 CPUs, and the filter is to filter every other CPU, the write would
  take a string larger than 256 bytes. Instead of using a fixed size buffer
  on the stack that is 256 bytes, allocate it to handle what is passed in.

- Stop having ftrace check the per-cpu data "disabled" flag

  The "disabled" flag in the data structure passed to most ftrace functions
  is checked to know if tracing has been disabled or not. This flag was
  added back in 2008 before the ring buffer had its own way to disable
  tracing. The "disable" flag is now not always set when needed, and the
  ring buffer flag should be used in all locations where the disabled is
  needed. Since the "disable" flag is redundant and incorrect, stop using it.
  Fix up some locations that use the "disable" flag to use the ring buffer
  info.

- Use a new tracer_tracing_disable/enable() instead of data->disable flag

  There's a few cases that set the data->disable flag to stop tracing, but
  this flag is not consistently used. It is also an on/off switch where if a
  function set it and calls another function that sets it, the called
  function may incorrectly enable it.

  Use a new trace_tracing_disable() and tracer_tracing_enable() that uses a
  counter and can be nested. These use the ring buffer flags which are
  always checked making the disabling more consistent.

- Save the trace clock in the persistent ring buffer

  Save what clock was used for tracing in the persistent ring buffer and set
  it back to that clock after a reboot.

- Remove unused reference to a per CPU data pointer in mmiotrace functions

- Remove unused buffer_page field from trace_array_cpu structure

- Remove more strncpy() instances

- Other minor clean ups and fixes


Please pull the latest trace-v6.16 tree, which can be found at:


  git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace-v6.16

Tag SHA1: f02d35b1e21423d6f9043f1b846f61ef9a42a30d
Head SHA1: 2fbdb6d8e03b70668c0876e635506540ae92ab05


Devaansh Kumar (1):
      tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf

Ilya Leoshkevich (1):
      ftrace: Expose call graph depth as unsigned int

Masami Hiramatsu (Google) (1):
      tracing: Record trace_clock and recover when reboot

Miaoqian Lin (1):
      tracing: Fix error handling in event_trigger_parse()

Pan Taixi (1):
      tracing: Fix compilation warning on arm32

Steven Rostedt (29):
      tracing: Update function trace addresses with module addresses
      tracing: Show function names when possible when listing fields
      tracing: Only return an adjusted address if it matches the kernel address
      tracing: Adjust addresses for printing out fields
      tracing: Show preempt and irq events callsites from the offsets in field print
      tracing: Always use memcpy() in histogram add_to_key()
      tracing: Move histogram trigger variables from stack to per CPU structure
      tracing: Add common_comm to histograms
      ftrace: Show subops in enabled_functions
      ftrace: Comment that ftrace_func_mapper is freed with free_ftrace_hash()
      tracing/mmiotrace: Remove reference to unused per CPU data pointer
      ftrace: Do not bother checking per CPU "disabled" flag
      tracing: Just use this_cpu_read() to access ignore_pid
      tracing: Add tracer_tracing_disable/enable() functions
      tracing: Use tracer_tracing_disable() instead of "disabled" field for ftrace_dump_one()
      tracing: kdb: Use tracer_tracing_on/off() instead of setting per CPU disabled
      ftrace: Do not disabled function graph based on "disabled" field
      tracing: Do not use per CPU array_buffer.data->disabled for cpumask
      ring-buffer: Add ring_buffer_record_is_on_cpu()
      tracing: branch: Use trace_tracing_is_on_cpu() instead of "disabled" field
      tracing: Convert the per CPU "disabled" counter to local from atomic
      tracing: Use atomic_inc_return() for updating "disabled" counter in irqsoff tracer
      tracing: Remove unused buffer_page field from trace_array_cpu structure
      tracing: Rename event_trigger_alloc() to trigger_data_alloc()
      tracing: Remove unnecessary "goto out" that simply returns ret is trigger code
      tracing: Add a helper function to handle the dereference arg in verifier
      tracing: Allow the top level trace_marker to write into another instances
      tracepoint: Have tracepoints created with DECLARE_TRACE() have _tp suffix
      tracing/sched: Use __string() instead of fixed lengths for task->comm

Tomas Glozar (1):
      tracing/osnoise: Allow arbitrarily long CPU string

Yury Norov (1):
      tracing: Cleanup upper_empty() in pid_list

----
 Documentation/trace/ftrace.rst                     |  13 ++
 Documentation/trace/tracepoints.rst                |  17 +-
 include/linux/ftrace.h                             |   2 +
 include/linux/ring_buffer.h                        |   1 +
 include/linux/tracepoint.h                         |  38 ++--
 include/trace/bpf_probe.h                          |   8 +-
 include/trace/define_trace.h                       |  17 +-
 include/trace/events/sched.h                       | 124 ++++++------
 include/trace/events/tcp.h                         |   2 +-
 kernel/trace/fgraph.c                              |   2 +
 kernel/trace/ftrace.c                              |  45 ++++-
 kernel/trace/pid_list.c                            |   8 +-
 kernel/trace/ring_buffer.c                         |  18 ++
 kernel/trace/trace.c                               | 214 +++++++++++++++++----
 kernel/trace/trace.h                               |  30 ++-
 kernel/trace/trace_branch.c                        |   4 +-
 kernel/trace/trace_entries.h                       |  12 +-
 kernel/trace/trace_events.c                        |  39 ++--
 kernel/trace/trace_events_hist.c                   | 179 ++++++++++++++---
 kernel/trace/trace_events_trigger.c                |  64 +++---
 kernel/trace/trace_functions.c                     |  24 +--
 kernel/trace/trace_functions_graph.c               |  38 +---
 kernel/trace/trace_irqsoff.c                       |  47 +++--
 kernel/trace/trace_kdb.c                           |   9 +-
 kernel/trace/trace_mmiotrace.c                     |  12 +-
 kernel/trace/trace_osnoise.c                       |   9 +-
 kernel/trace/trace_output.c                        |  60 ++++--
 kernel/trace/trace_sched_wakeup.c                  |  18 +-
 kernel/trace/trace_stack.c                         |   2 +-
 tools/testing/selftests/bpf/progs/raw_tp_null.c    |   2 +-
 .../testing/selftests/bpf/progs/raw_tp_null_fail.c |   2 +-
 .../selftests/bpf/progs/test_module_attach.c       |   4 +-
 .../selftests/bpf/progs/test_tp_btf_nullable.c     |   4 +-
 .../testing/selftests/bpf/test_kmods/bpf_testmod.c |   8 +-
 34 files changed, 720 insertions(+), 356 deletions(-)
---------------------------

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ