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: <20250412210446.338481957@goodmis.org>
Date: Sat, 12 Apr 2025 17:04:46 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: linux-kernel@...r.kernel.org
Cc: Masami Hiramatsu <mhiramat@...nel.org>,
 Mark Rutland <mark.rutland@....com>,
 Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
 Andrew Morton <akpm@...ux-foundation.org>
Subject: [for-linus][PATCH 0/7] tracing: Fixes for 6.15


tracing fixes for v6.15

- Hide get_vm_area() from MMUless builds

  The function get_vm_area() is not defined when CONFIG_MMU is not defined.
  Hide that function within #ifdef CONFIG_MMU.

- Fix output of synthetic events when they have dynamic strings

  The print fmt of the synthetic event's format file use to have "%.*s" for
  dynamic size strings even though the user space exported arguments had
  only __get_str() macro that provided just a nul terminated string. This
  was fixed so that user space could parse this properly. But the reason
  that it had "%.*s" was because internally it provided the maximum size of
  the string as one of the arguments. The fix that replaced "%.*s" with "%s"
  caused the trace output (when the kernel reads the event) to write
  "(efault)" as it would now read the length of the string as "%s".

  As the string provided is always nul terminated, there's no reason for the
  internal code to use "%.*s" anyway. Just remove the length argument to
  match the "%s" that is now in the format.

- Fix the ftrace subops hash logic of the manager ops hash

  The function_graph uses the ftrace subops code. The subops code is a way
  to have a single ftrace_ops registered with ftrace to determine what
  functions will call the ftrace_ops callback. More than one user of
  function graph can register a ftrace_ops with it. The function graph
  infrastructure will then add this ftrace_ops as a subops with the main
  ftrace_ops it registers with ftrace. This is because the functions will
  always call the function graph callback which in turn calls the subops
  ftrace_ops callbacks.

  The main ftrace_ops must add a callback to all the functions that the
  subops want a callback from. When a subops is registered, it will update
  the main ftrace_ops hash to include the functions it wants. This is the
  logic that was broken.

  The ftrace_ops hash has a "filter_hash" and a "notrace_hash" were all the
  functions in the filter_hash but not in the notrace_hash are attached by
  ftrace. The original logic would have the main ftrace_ops filter_hash be a
  union of all the subops filter_hashes and the main notrace_hash would be a
  intersect of all the subops filter hashes. But this was incorrect because
  the notrace hash depends on the filter_hash it is associated to and not
  the union of all filter_hashes.

  Instead, when a subops is added, just include all the functions of the
  subops hash that are in its filter_hash but not in its notrace_hash. The
  main subops hash should not use its notrace hash, unless all of its subops
  hashes have an empty filter_hash (which means to attach to all functions),
  and then, and only then, the main ftrace_ops notrace hash can be the
  intersect of all the subops hashes.

  This not only fixes the bug, but also simplifies the code.

- Add a selftest to better test the subops filtering

  Add a selftest that would catch the bug fixed by the above change.

- Fix extra newline printed in function tracing with retval

  The function parameter code changed the output logic slightly and called
  print_graph_retval() and also printed a newline. The print_graph_retval()
  also prints a newline which caused blank lines to be printed in the
  function graph tracer when retval was added. This caused one of the
  selftests to fail if retvals were enabled. Instead remove the new line
  output from print_graph_retval() and have the callers always print the
  new line so that it doesn't have to do special logic if it calls
  print_graph_retval() or not.

- Fix out-of-bound memory access in the runtime verifier

  When rv_is_container_monitor() is called on the last entry on the link
  list it references the next entry, which is the list head and causes an
  out-of-bound memory access.



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

Head SHA1: 8d7861ac507d23024c7d74b6cb59a9cca248bcb7


Andy Chiu (1):
      ftrace: Properly merge notrace hashes

Nam Cao (1):
      rv: Fix out-of-bound memory access in rv_is_container_monitor()

Steven Rostedt (5):
      tracing: Hide get_vm_area() from MMUless builds
      tracing: Do not add length to print format in synthetic events
      ftrace: Fix accounting of subop hashes
      tracing/selftest: Add test to better test subops filtering of function graph
      ftrace: Do not have print_graph_retval() add a newline

----
 kernel/trace/ftrace.c                              | 314 ++++++++++++---------
 kernel/trace/rv/rv.c                               |   7 +-
 kernel/trace/trace.c                               |   7 +
 kernel/trace/trace_events_synth.c                  |   1 -
 kernel/trace/trace_functions_graph.c               |  11 +-
 .../ftrace/test.d/ftrace/fgraph-multi-filter.tc    | 177 ++++++++++++
 6 files changed, 372 insertions(+), 145 deletions(-)
 create mode 100644 tools/testing/selftests/ftrace/test.d/ftrace/fgraph-multi-filter.tc

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ