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: <20250125110024.680cf413@gandalf.local.home>
Date: Sat, 25 Jan 2025 11:00:24 -0500
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>,
 Tomas Glozar <tglozar@...hat.com>, John Kacur <jkacur@...hat.com>, Gabriele
 Monaco <gmonaco@...hat.com>
Subject: [GIT PULL] rv: osnoise: Fixes for 6.14


Linus,

Runtime verifier and osnoise fixes for 6.14:

- Reset idle tasks on reset for runtime verifier

  When the runtime verifier is reset, it resets the task's data that is being
  monitored. But it only iterates for_each_process() which does not include
  the idle tasks. As the idle tasks can be monitored, they need to be reset
  as well.

- Fix the enabling and disabling of tracepoints in osnoise

  If timerlat is enabled and the WORKLOAD flag is not set, then the osnoise
  tracer will enable the migrate task tracepoint to monitor it for its own
  workload. The test to enable the tracepoint is done against user space
  modifiable parameters. On disabling of the tracer, those same parameters
  are used to determine if the tracepoint should be disabled. The problem is
  if user space were to modify the parameters after it enables the tracer
  then it may not disable the tracepoint.

  Instead, a static variable is used to keep track if the tracepoint was
  enabled or not. Then when the tracer shuts down, it will use this variable
  to decide to disable the tracepoint or not, instead of looking at the user
  space parameters.


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


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

Tag SHA1: 70b59fc97fd30b5f3df891555bb409450f7db63f
Head SHA1: e3ff4245928f948f3eb2e852aa350b870421c358


Gabriele Monaco (1):
      rv: Reset per-task monitors also for idle tasks

Steven Rostedt (1):
      tracing/osnoise: Fix resetting of tracepoints

----
 include/rv/da_monitor.h      |  4 ++++
 kernel/trace/trace_osnoise.c | 17 ++++++++++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)
---------------------------
diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
index 9705b2a98e49..510c88bfabd4 100644
--- a/include/rv/da_monitor.h
+++ b/include/rv/da_monitor.h
@@ -14,6 +14,7 @@
 #include <rv/automata.h>
 #include <linux/rv.h>
 #include <linux/bug.h>
+#include <linux/sched.h>
 
 #ifdef CONFIG_RV_REACTORS
 
@@ -324,10 +325,13 @@ static inline struct da_monitor *da_get_monitor_##name(struct task_struct *tsk)
 static void da_monitor_reset_all_##name(void)							\
 {												\
 	struct task_struct *g, *p;								\
+	int cpu;										\
 												\
 	read_lock(&tasklist_lock);								\
 	for_each_process_thread(g, p)								\
 		da_monitor_reset_##name(da_get_monitor_##name(p));				\
+	for_each_present_cpu(cpu)								\
+		da_monitor_reset_##name(da_get_monitor_##name(idle_task(cpu)));			\
 	read_unlock(&tasklist_lock);								\
 }												\
 												\
diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
index b9f96c77527d..23cbc24ed292 100644
--- a/kernel/trace/trace_osnoise.c
+++ b/kernel/trace/trace_osnoise.c
@@ -1229,6 +1229,8 @@ static void trace_sched_migrate_callback(void *data, struct task_struct *p, int
 	}
 }
 
+static bool monitor_enabled;
+
 static int register_migration_monitor(void)
 {
 	int ret = 0;
@@ -1237,16 +1239,25 @@ static int register_migration_monitor(void)
 	 * Timerlat thread migration check is only required when running timerlat in user-space.
 	 * Thus, enable callback only if timerlat is set with no workload.
 	 */
-	if (timerlat_enabled() && !test_bit(OSN_WORKLOAD, &osnoise_options))
+	if (timerlat_enabled() && !test_bit(OSN_WORKLOAD, &osnoise_options)) {
+		if (WARN_ON_ONCE(monitor_enabled))
+			return 0;
+
 		ret = register_trace_sched_migrate_task(trace_sched_migrate_callback, NULL);
+		if (!ret)
+			monitor_enabled = true;
+	}
 
 	return ret;
 }
 
 static void unregister_migration_monitor(void)
 {
-	if (timerlat_enabled() && !test_bit(OSN_WORKLOAD, &osnoise_options))
-		unregister_trace_sched_migrate_task(trace_sched_migrate_callback, NULL);
+	if (!monitor_enabled)
+		return;
+
+	unregister_trace_sched_migrate_task(trace_sched_migrate_callback, NULL);
+	monitor_enabled = false;
 }
 #else
 static int register_migration_monitor(void)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ