public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Masami Hiramatsu <mhiramat@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Al Viro <viro@ZenIV.linux.org.uk>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	"Steven Rostedt (Google)" <rostedt@goodmis.org>
Subject: [PATCH 6.12 133/160] tracing: Check "%s" dereference via the field and not the TP_printk format
Date: Mon, 23 Dec 2024 16:59:04 +0100	[thread overview]
Message-ID: <20241223155413.925120191@linuxfoundation.org> (raw)
In-Reply-To: <20241223155408.598780301@linuxfoundation.org>

6.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Steven Rostedt <rostedt@goodmis.org>

commit afd2627f727b89496d79a6b934a025fc916d4ded upstream.

The TP_printk() portion of a trace event is executed at the time a event
is read from the trace. This can happen seconds, minutes, hours, days,
months, years possibly later since the event was recorded. If the print
format contains a dereference to a string via "%s", and that string was
allocated, there's a chance that string could be freed before it is read
by the trace file.

To protect against such bugs, there are two functions that verify the
event. The first one is test_event_printk(), which is called when the
event is created. It reads the TP_printk() format as well as its arguments
to make sure nothing may be dereferencing a pointer that was not copied
into the ring buffer along with the event. If it is, it will trigger a
WARN_ON().

For strings that use "%s", it is not so easy. The string may not reside in
the ring buffer but may still be valid. Strings that are static and part
of the kernel proper which will not be freed for the life of the running
system, are safe to dereference. But to know if it is a pointer to a
static string or to something on the heap can not be determined until the
event is triggered.

This brings us to the second function that tests for the bad dereferencing
of strings, trace_check_vprintf(). It would walk through the printf format
looking for "%s", and when it finds it, it would validate that the pointer
is safe to read. If not, it would produces a WARN_ON() as well and write
into the ring buffer "[UNSAFE-MEMORY]".

The problem with this is how it used va_list to have vsnprintf() handle
all the cases that it didn't need to check. Instead of re-implementing
vsnprintf(), it would make a copy of the format up to the %s part, and
call vsnprintf() with the current va_list ap variable, where the ap would
then be ready to point at the string in question.

For architectures that passed va_list by reference this was possible. For
architectures that passed it by copy it was not. A test_can_verify()
function was used to differentiate between the two, and if it wasn't
possible, it would disable it.

Even for architectures where this was feasible, it was a stretch to rely
on such a method that is undocumented, and could cause issues later on
with new optimizations of the compiler.

Instead, the first function test_event_printk() was updated to look at
"%s" as well. If the "%s" argument is a pointer outside the event in the
ring buffer, it would find the field type of the event that is the problem
and mark the structure with a new flag called "needs_test". The event
itself will be marked by TRACE_EVENT_FL_TEST_STR to let it be known that
this event has a field that needs to be verified before the event can be
printed using the printf format.

When the event fields are created from the field type structure, the
fields would copy the field type's "needs_test" value.

Finally, before being printed, a new function ignore_event() is called
which will check if the event has the TEST_STR flag set (if not, it
returns false). If the flag is set, it then iterates through the events
fields looking for the ones that have the "needs_test" flag set.

Then it uses the offset field from the field structure to find the pointer
in the ring buffer event. It runs the tests to make sure that pointer is
safe to print and if not, it triggers the WARN_ON() and also adds to the
trace output that the event in question has an unsafe memory access.

The ignore_event() makes the trace_check_vprintf() obsolete so it is
removed.

Link: https://lore.kernel.org/all/CAHk-=wh3uOnqnZPpR0PeLZZtyWbZLboZ7cHLCKRWsocvs9Y7hQ@mail.gmail.com/

Cc: stable@vger.kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/20241217024720.848621576@goodmis.org
Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/trace_events.h |    6 -
 kernel/trace/trace.c         |  255 ++++++++-----------------------------------
 kernel/trace/trace.h         |    6 -
 kernel/trace/trace_events.c  |   32 +++--
 kernel/trace/trace_output.c  |    6 -
 5 files changed, 88 insertions(+), 217 deletions(-)

--- a/include/linux/trace_events.h
+++ b/include/linux/trace_events.h
@@ -285,7 +285,8 @@ struct trace_event_fields {
 			const char *name;
 			const int  size;
 			const int  align;
-			const int  is_signed;
+			const unsigned int is_signed:1;
+			unsigned int needs_test:1;
 			const int  filter_type;
 			const int  len;
 		};
@@ -337,6 +338,7 @@ enum {
 	TRACE_EVENT_FL_EPROBE_BIT,
 	TRACE_EVENT_FL_FPROBE_BIT,
 	TRACE_EVENT_FL_CUSTOM_BIT,
+	TRACE_EVENT_FL_TEST_STR_BIT,
 };
 
 /*
@@ -354,6 +356,7 @@ enum {
  *  CUSTOM        - Event is a custom event (to be attached to an exsiting tracepoint)
  *                   This is set when the custom event has not been attached
  *                   to a tracepoint yet, then it is cleared when it is.
+ *  TEST_STR      - The event has a "%s" that points to a string outside the event
  */
 enum {
 	TRACE_EVENT_FL_FILTERED		= (1 << TRACE_EVENT_FL_FILTERED_BIT),
@@ -367,6 +370,7 @@ enum {
 	TRACE_EVENT_FL_EPROBE		= (1 << TRACE_EVENT_FL_EPROBE_BIT),
 	TRACE_EVENT_FL_FPROBE		= (1 << TRACE_EVENT_FL_FPROBE_BIT),
 	TRACE_EVENT_FL_CUSTOM		= (1 << TRACE_EVENT_FL_CUSTOM_BIT),
+	TRACE_EVENT_FL_TEST_STR		= (1 << TRACE_EVENT_FL_TEST_STR_BIT),
 };
 
 #define TRACE_EVENT_FL_UKPROBE (TRACE_EVENT_FL_KPROBE | TRACE_EVENT_FL_UPROBE)
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3635,17 +3635,12 @@ char *trace_iter_expand_format(struct tr
 }
 
 /* Returns true if the string is safe to dereference from an event */
-static bool trace_safe_str(struct trace_iterator *iter, const char *str,
-			   bool star, int len)
+static bool trace_safe_str(struct trace_iterator *iter, const char *str)
 {
 	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))
@@ -3685,181 +3680,69 @@ static bool trace_safe_str(struct trace_
 	return false;
 }
 
-static DEFINE_STATIC_KEY_FALSE(trace_no_verify);
-
-static int test_can_verify_check(const char *fmt, ...)
-{
-	char buf[16];
-	va_list ap;
-	int ret;
-
-	/*
-	 * The verifier is dependent on vsnprintf() modifies the va_list
-	 * passed to it, where it is sent as a reference. Some architectures
-	 * (like x86_32) passes it by value, which means that vsnprintf()
-	 * does not modify the va_list passed to it, and the verifier
-	 * would then need to be able to understand all the values that
-	 * vsnprintf can use. If it is passed by value, then the verifier
-	 * is disabled.
-	 */
-	va_start(ap, fmt);
-	vsnprintf(buf, 16, "%d", ap);
-	ret = va_arg(ap, int);
-	va_end(ap);
-
-	return ret;
-}
-
-static void test_can_verify(void)
-{
-	if (!test_can_verify_check("%d %d", 0, 1)) {
-		pr_info("trace event string verifier disabled\n");
-		static_branch_inc(&trace_no_verify);
-	}
-}
-
 /**
- * trace_check_vprintf - Check dereferenced strings while writing to the seq buffer
+ * ignore_event - Check dereferenced fields while writing to the seq buffer
  * @iter: The iterator that holds the seq buffer and the event being printed
- * @fmt: The format used to print the event
- * @ap: The va_list holding the data to print from @fmt.
  *
- * This writes the data into the @iter->seq buffer using the data from
- * @fmt and @ap. If the format has a %s, then the source of the string
- * is examined to make sure it is safe to print, otherwise it will
- * warn and print "[UNSAFE MEMORY]" in place of the dereferenced string
- * pointer.
+ * At boot up, test_event_printk() will flag any event that dereferences
+ * a string with "%s" that does exist in the ring buffer. It may still
+ * be valid, as the string may point to a static string in the kernel
+ * rodata that never gets freed. But if the string pointer is pointing
+ * to something that was allocated, there's a chance that it can be freed
+ * by the time the user reads the trace. This would cause a bad memory
+ * access by the kernel and possibly crash the system.
+ *
+ * This function will check if the event has any fields flagged as needing
+ * to be checked at runtime and perform those checks.
+ *
+ * If it is found that a field is unsafe, it will write into the @iter->seq
+ * a message stating what was found to be unsafe.
+ *
+ * @return: true if the event is unsafe and should be ignored,
+ *          false otherwise.
  */
-void trace_check_vprintf(struct trace_iterator *iter, const char *fmt,
-			 va_list ap)
+bool ignore_event(struct trace_iterator *iter)
 {
-	long text_delta = 0;
-	long data_delta = 0;
-	const char *p = fmt;
-	const char *str;
-	bool good;
-	int i, j;
+	struct ftrace_event_field *field;
+	struct trace_event *trace_event;
+	struct trace_event_call *event;
+	struct list_head *head;
+	struct trace_seq *seq;
+	const void *ptr;
 
-	if (WARN_ON_ONCE(!fmt))
-		return;
+	trace_event = ftrace_find_event(iter->ent->type);
 
-	if (static_branch_unlikely(&trace_no_verify))
-		goto print;
+	seq = &iter->seq;
 
-	/*
-	 * When the kernel is booted with the tp_printk command line
-	 * parameter, trace events go directly through to printk().
-	 * It also is checked by this function, but it does not
-	 * have an associated trace_array (tr) for it.
-	 */
-	if (iter->tr) {
-		text_delta = iter->tr->text_delta;
-		data_delta = iter->tr->data_delta;
+	if (!trace_event) {
+		trace_seq_printf(seq, "EVENT ID %d NOT FOUND?\n", iter->ent->type);
+		return true;
 	}
 
-	/* Don't bother checking when doing a ftrace_dump() */
-	if (iter->fmt == static_fmt_buf)
-		goto print;
-
-	while (*p) {
-		bool star = false;
-		int len = 0;
-
-		j = 0;
-
-		/*
-		 * We only care about %s and variants
-		 * as well as %p[sS] if delta is non-zero
-		 */
-		for (i = 0; p[i]; i++) {
-			if (i + 1 >= iter->fmt_size) {
-				/*
-				 * If we can't expand the copy buffer,
-				 * just print it.
-				 */
-				if (!trace_iter_expand_format(iter))
-					goto print;
-			}
-
-			if (p[i] == '\\' && p[i+1]) {
-				i++;
-				continue;
-			}
-			if (p[i] == '%') {
-				/* Need to test cases like %08.*s */
-				for (j = 1; p[i+j]; j++) {
-					if (isdigit(p[i+j]) ||
-					    p[i+j] == '.')
-						continue;
-					if (p[i+j] == '*') {
-						star = true;
-						continue;
-					}
-					break;
-				}
-				if (p[i+j] == 's')
-					break;
+	event = container_of(trace_event, struct trace_event_call, event);
+	if (!(event->flags & TRACE_EVENT_FL_TEST_STR))
+		return false;
 
-				if (text_delta && p[i+1] == 'p' &&
-				    ((p[i+2] == 's' || p[i+2] == 'S')))
-					break;
+	head = trace_get_fields(event);
+	if (!head) {
+		trace_seq_printf(seq, "FIELDS FOR EVENT '%s' NOT FOUND?\n",
+				 trace_event_name(event));
+		return true;
+	}
 
-				star = false;
-			}
-			j = 0;
-		}
-		/* If no %s found then just print normally */
-		if (!p[i])
-			break;
+	/* Offsets are from the iter->ent that points to the raw event */
+	ptr = iter->ent;
 
-		/* Copy up to the %s, and print that */
-		strncpy(iter->fmt, p, i);
-		iter->fmt[i] = '\0';
-		trace_seq_vprintf(&iter->seq, iter->fmt, ap);
-
-		/* Add delta to %pS pointers */
-		if (p[i+1] == 'p') {
-			unsigned long addr;
-			char fmt[4];
-
-			fmt[0] = '%';
-			fmt[1] = 'p';
-			fmt[2] = p[i+2]; /* Either %ps or %pS */
-			fmt[3] = '\0';
-
-			addr = va_arg(ap, unsigned long);
-			addr += text_delta;
-			trace_seq_printf(&iter->seq, fmt, (void *)addr);
+	list_for_each_entry(field, head, link) {
+		const char *str;
+		bool good;
 
-			p += i + 3;
+		if (!field->needs_test)
 			continue;
-		}
 
-		/*
-		 * If iter->seq is full, the above call no longer guarantees
-		 * that ap is in sync with fmt processing, and further calls
-		 * to va_arg() can return wrong positional arguments.
-		 *
-		 * Ensure that ap is no longer used in this case.
-		 */
-		if (iter->seq.full) {
-			p = "";
-			break;
-		}
-
-		if (star)
-			len = va_arg(ap, int);
-
-		/* The ap now points to the string data of the %s */
-		str = va_arg(ap, const char *);
-
-		good = trace_safe_str(iter, str, star, len);
+		str = *(const char **)(ptr + field->offset);
 
-		/* Could be from the last boot */
-		if (data_delta && !good) {
-			str += data_delta;
-			good = trace_safe_str(iter, str, star, len);
-		}
+		good = trace_safe_str(iter, str);
 
 		/*
 		 * If you hit this warning, it is likely that the
@@ -3870,44 +3753,14 @@ void trace_check_vprintf(struct trace_it
 		 * instead. See samples/trace_events/trace-events-sample.h
 		 * for reference.
 		 */
-		if (WARN_ONCE(!good, "fmt: '%s' current_buffer: '%s'",
-			      fmt, seq_buf_str(&iter->seq.seq))) {
-			int ret;
-
-			/* Try to safely read the string */
-			if (star) {
-				if (len + 1 > iter->fmt_size)
-					len = iter->fmt_size - 1;
-				if (len < 0)
-					len = 0;
-				ret = copy_from_kernel_nofault(iter->fmt, str, len);
-				iter->fmt[len] = 0;
-				star = false;
-			} else {
-				ret = strncpy_from_kernel_nofault(iter->fmt, str,
-								  iter->fmt_size);
-			}
-			if (ret < 0)
-				trace_seq_printf(&iter->seq, "(0x%px)", str);
-			else
-				trace_seq_printf(&iter->seq, "(0x%px:%s)",
-						 str, iter->fmt);
-			str = "[UNSAFE-MEMORY]";
-			strcpy(iter->fmt, "%s");
-		} else {
-			strncpy(iter->fmt, p + i, j + 1);
-			iter->fmt[j+1] = '\0';
+		if (WARN_ONCE(!good, "event '%s' has unsafe pointer field '%s'",
+			      trace_event_name(event), field->name)) {
+			trace_seq_printf(seq, "EVENT %s: HAS UNSAFE POINTER FIELD '%s'\n",
+					 trace_event_name(event), field->name);
+			return true;
 		}
-		if (star)
-			trace_seq_printf(&iter->seq, iter->fmt, len, str);
-		else
-			trace_seq_printf(&iter->seq, iter->fmt, str);
-
-		p += i + j + 1;
 	}
- print:
-	if (*p)
-		trace_seq_vprintf(&iter->seq, p, ap);
+	return false;
 }
 
 const char *trace_event_format(struct trace_iterator *iter, const char *fmt)
@@ -10803,8 +10656,6 @@ __init static int tracer_alloc_buffers(v
 
 	register_snapshot_cmd();
 
-	test_can_verify();
-
 	return 0;
 
 out_free_pipe_cpumask:
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -664,9 +664,8 @@ void trace_buffer_unlock_commit_nostack(
 
 bool trace_is_tracepoint_string(const char *str);
 const char *trace_event_format(struct trace_iterator *iter, const char *fmt);
-void trace_check_vprintf(struct trace_iterator *iter, const char *fmt,
-			 va_list ap) __printf(2, 0);
 char *trace_iter_expand_format(struct trace_iterator *iter);
+bool ignore_event(struct trace_iterator *iter);
 
 int trace_empty(struct trace_iterator *iter);
 
@@ -1402,7 +1401,8 @@ struct ftrace_event_field {
 	int			filter_type;
 	int			offset;
 	int			size;
-	int			is_signed;
+	unsigned int		is_signed:1;
+	unsigned int		needs_test:1;
 	int			len;
 };
 
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -82,7 +82,7 @@ static int system_refcount_dec(struct ev
 	}
 
 static struct ftrace_event_field *
-__find_event_field(struct list_head *head, char *name)
+__find_event_field(struct list_head *head, const char *name)
 {
 	struct ftrace_event_field *field;
 
@@ -114,7 +114,8 @@ trace_find_event_field(struct trace_even
 
 static int __trace_define_field(struct list_head *head, const char *type,
 				const char *name, int offset, int size,
-				int is_signed, int filter_type, int len)
+				int is_signed, int filter_type, int len,
+				int need_test)
 {
 	struct ftrace_event_field *field;
 
@@ -133,6 +134,7 @@ static int __trace_define_field(struct l
 	field->offset = offset;
 	field->size = size;
 	field->is_signed = is_signed;
+	field->needs_test = need_test;
 	field->len = len;
 
 	list_add(&field->link, head);
@@ -151,13 +153,13 @@ int trace_define_field(struct trace_even
 
 	head = trace_get_fields(call);
 	return __trace_define_field(head, type, name, offset, size,
-				    is_signed, filter_type, 0);
+				    is_signed, filter_type, 0, 0);
 }
 EXPORT_SYMBOL_GPL(trace_define_field);
 
 static int trace_define_field_ext(struct trace_event_call *call, const char *type,
 		       const char *name, int offset, int size, int is_signed,
-		       int filter_type, int len)
+		       int filter_type, int len, int need_test)
 {
 	struct list_head *head;
 
@@ -166,13 +168,13 @@ static int trace_define_field_ext(struct
 
 	head = trace_get_fields(call);
 	return __trace_define_field(head, type, name, offset, size,
-				    is_signed, filter_type, len);
+				    is_signed, filter_type, len, need_test);
 }
 
 #define __generic_field(type, item, filter_type)			\
 	ret = __trace_define_field(&ftrace_generic_fields, #type,	\
 				   #item, 0, 0, is_signed_type(type),	\
-				   filter_type, 0);			\
+				   filter_type, 0, 0);			\
 	if (ret)							\
 		return ret;
 
@@ -181,7 +183,8 @@ static int trace_define_field_ext(struct
 				   "common_" #item,			\
 				   offsetof(typeof(ent), item),		\
 				   sizeof(ent.item),			\
-				   is_signed_type(type), FILTER_OTHER, 0);	\
+				   is_signed_type(type), FILTER_OTHER,	\
+				   0, 0);				\
 	if (ret)							\
 		return ret;
 
@@ -332,6 +335,7 @@ static bool process_pointer(const char *
 /* Return true if the string is safe */
 static bool process_string(const char *fmt, int len, struct trace_event_call *call)
 {
+	struct trace_event_fields *field;
 	const char *r, *e, *s;
 
 	e = fmt + len;
@@ -372,8 +376,16 @@ static bool process_string(const char *f
 	if (process_pointer(fmt, len, call))
 		return true;
 
-	/* Make sure the field is found, and consider it OK for now if it is */
-	return find_event_field(fmt, call) != NULL;
+	/* Make sure the field is found */
+	field = find_event_field(fmt, call);
+	if (!field)
+		return false;
+
+	/* Test this field's string before printing the event */
+	call->flags |= TRACE_EVENT_FL_TEST_STR;
+	field->needs_test = 1;
+
+	return true;
 }
 
 /*
@@ -2586,7 +2598,7 @@ event_define_fields(struct trace_event_c
 			ret = trace_define_field_ext(call, field->type, field->name,
 						 offset, field->size,
 						 field->is_signed, field->filter_type,
-						 field->len);
+						 field->len, field->needs_test);
 			if (WARN_ON_ONCE(ret)) {
 				pr_err("error code is %d\n", ret);
 				break;
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -317,10 +317,14 @@ EXPORT_SYMBOL(trace_raw_output_prep);
 
 void trace_event_printf(struct trace_iterator *iter, const char *fmt, ...)
 {
+	struct trace_seq *s = &iter->seq;
 	va_list ap;
 
+	if (ignore_event(iter))
+		return;
+
 	va_start(ap, fmt);
-	trace_check_vprintf(iter, trace_event_format(iter, fmt), ap);
+	trace_seq_vprintf(s, trace_event_format(iter, fmt), ap);
 	va_end(ap);
 }
 EXPORT_SYMBOL(trace_event_printf);



  parent reply	other threads:[~2024-12-23 16:07 UTC|newest]

Thread overview: 184+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-23 15:56 [PATCH 6.12 000/160] 6.12.7-rc1 review Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 001/160] net: sched: fix ordering of qlen adjustment Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 002/160] net: stmmac: fix TSO DMA API usage causing oops Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 003/160] firmware: arm_scmi: Fix i.MX build dependency Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 004/160] firmware: arm_ffa: Fix the race around setting ffa_dev->properties Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 005/160] RISC-V: KVM: Fix csr_write -> csr_set for HVIEN PMU overflow bit Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 006/160] sched/fair: Fix NEXT_BUDDY Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 007/160] sched/fair: Fix sched_can_stop_tick() for fair tasks Greg Kroah-Hartman
2024-12-23 15:56 ` [PATCH 6.12 008/160] sched/eevdf: More PELT vs DELAYED_DEQUEUE Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 009/160] p2sb: Factor out p2sb_read_from_cache() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 010/160] p2sb: Introduce the global flag p2sb_hidden_by_bios Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 011/160] p2sb: Move P2SB hide and unhide code to p2sb_scan_and_cache() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 012/160] p2sb: Do not scan and remove the P2SB device when it is unhidden Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 013/160] i2c: pnx: Fix timeout in wait functions Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 014/160] s390/ipl: Fix never less than zero warning Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 015/160] erofs: fix PSI memstall accounting Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 016/160] sched/dlserver: Fix dlserver double enqueue Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 017/160] sched/dlserver: Fix dlserver time accounting Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 018/160] s390/mm: Consider KMSAN modules metadata for paging levels Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 019/160] erofs: add erofs_sb_free() helper Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 020/160] erofs: use `struct erofs_device_info` for the primary device Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 021/160] erofs: reference `struct erofs_device_info` for erofs_map_dev Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 022/160] erofs: use buffered I/O for file-backed mounts by default Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 023/160] xfs: sb_spino_align is not verified Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 024/160] xfs: fix sparse inode limits on runt AG Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 025/160] xfs: fix off-by-one error in fsmaps end_daddr usage Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 026/160] xfs: fix sb_spino_align checks for large fsblock sizes Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 027/160] xfs: fix zero byte checking in the superblock scrubber Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 028/160] tools: hv: change permissions of NetworkManager configuration file Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 029/160] cxl/pci: Fix potential bogus return value upon successful probing Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 030/160] cxl/region: Fix region creation for greater than x2 switches Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 031/160] net/smc: protect link down work from execute after lgr freed Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 032/160] net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 033/160] net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 034/160] net/smc: check v2_ext_offset/eid_cnt/ism_gid_cnt " Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 035/160] net/smc: check smcd_v2_ext_offset " Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 036/160] net/smc: check return value of sock_recvmsg when draining clc data Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 037/160] net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 038/160] netdevsim: prevent bad user input in nsim_dev_health_break_write() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 039/160] tools/net/ynl: fix sub-message key lookup for nested attributes Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 040/160] ionic: Fix netdev notifier unregister on failure Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 041/160] ionic: no double destroy workqueue Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 042/160] ionic: use ee->offset when returning sprom data Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 043/160] net: renesas: rswitch: rework ts tags management Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 044/160] ksmbd: count all requests in req_running counter Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 045/160] ksmbd: fix broken transfers when exceeding max simultaneous operations Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 046/160] netdev: fix repeated netlink messages in queue dump Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 047/160] netdev: fix repeated netlink messages in queue stats Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 048/160] team: Fix feature exposure when no ports are present Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 049/160] net: hinic: Fix cleanup in create_rxqs/txqs() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 050/160] net: ethernet: oa_tc6: fix infinite loop error when tx credits becomes 0 Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 051/160] net: ethernet: oa_tc6: fix tx skb race condition between reference pointers Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 052/160] net: ethernet: bgmac-platform: fix an OF node reference leak Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 053/160] net: netdevsim: fix nsim_pp_hold_write() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 054/160] can: m_can: set init flag earlier in probe Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 055/160] can: m_can: fix missed interrupts with m_can_pci Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 056/160] ipvs: Fix clamp() of ip_vs_conn_tab on small memory systems Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 057/160] netfilter: ipset: Fix for recursive locking warning Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 058/160] selftests: openvswitch: fix tcpdump execution Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 059/160] net: dsa: restore dsa_software_vlan_untag() ability to operate on VLAN-untagged traffic Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 060/160] netdev-genl: avoid empty messages in queue dump Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 061/160] psample: adjust size if rate_as_probability is set Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 062/160] net: mdiobus: fix an OF node reference leak Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 063/160] mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 064/160] mmc: mtk-sd: disable wakeup in .remove() and in the error path of .probe() Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 065/160] irqchip/gic-v3: Work around insecure GIC integrations Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 066/160] EDAC/amd64: Simplify ECC check on unified memory controllers Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 067/160] KVM: arm64: Do not allow ID_AA64MMFR0_EL1.ASIDbits to be overridden Greg Kroah-Hartman
2024-12-23 15:57 ` [PATCH 6.12 068/160] KVM: x86: Cache CPUID.0xD XSTATE offsets+sizes during module init Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 069/160] net: tun: fix tun_napi_alloc_frags() Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 070/160] chelsio/chtls: prevent potential integer overflow on 32bit Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 071/160] net: mctp: handle skb cleanup on sock_queue failures Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 072/160] block: Revert "block: Fix potential deadlock while freezing queue and acquiring sysfs_lock" Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 073/160] i2c: riic: Always round-up when calculating bus period Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 074/160] efivarfs: Fix error on non-existent file Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 075/160] hexagon: Disable constant extender optimization for LLVM prior to 19.1.0 Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 076/160] USB: serial: option: add TCL IK512 MBIM & ECM Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 077/160] USB: serial: option: add MeiG Smart SLM770A Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 078/160] USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 079/160] USB: serial: option: add MediaTek T7XX compositions Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 080/160] USB: serial: option: add Telit FE910C04 rmnet compositions Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 081/160] xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 082/160] thunderbolt: Add support for Intel Panther Lake-M/P Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 083/160] thunderbolt: Improve redrive mode handling Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 084/160] thunderbolt: Dont display nvm_version unless upgrade supported Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 085/160] drm/display: use ERR_PTR on DP tunnel manager creation fail Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 086/160] drm/amd: Update strapping for NBIO 2.5.0 Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 087/160] drm/modes: Avoid divide by zero harder in drm_mode_vrefresh() Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 088/160] drm/amdgpu: fix amdgpu_coredump Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 089/160] drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 090/160] udmabuf: udmabuf_create pin folio codestyle cleanup Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 091/160] udmabuf: fix memory leak on last export_udmabuf() error path Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 092/160] dma-buf: Fix __dma_buf_debugfs_list_del argument for !CONFIG_DEBUG_FS Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 093/160] drm/panel: himax-hx83102: Add a check to prevent NULL pointer dereference Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 094/160] drm/panel: novatek-nt35950: fix return value check in nt35950_probe() Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 095/160] drm/panel: st7701: Add prepare_prev_first flag to drm_panel Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 096/160] drm/panel: synaptics-r63353: Fix regulator unbalance Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 097/160] i915/guc: Reset engine utilization buffer before registration Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 098/160] i915/guc: Ensure busyness counter increases motonically Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 099/160] i915/guc: Accumulate active runtime on gt reset Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 100/160] drm/amdgpu: dont access invalid sched Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 101/160] hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 102/160] hwmon: (tmp513) Fix Current Register value interpretation Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 103/160] hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 104/160] block: avoid to reuse `hctx` not removed from cpuhp callback list Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 105/160] trace/ring-buffer: Do not use TP_printk() formatting for boot mapped buffers Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 106/160] drm/amdgpu/nbio7.11: fix IP version check Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 107/160] drm/amdgpu/nbio7.7: " Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 108/160] drm/amdgpu/smu14.0.2: " Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 109/160] zram: refuse to use zero sized block device as backing device Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 110/160] zram: fix uninitialized ZRAM not releasing " Greg Kroah-Hartman
2025-01-08  3:58   ` Sergey Senozhatsky
2024-12-23 15:58 ` [PATCH 6.12 111/160] vmalloc: fix accounting with i915 Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 112/160] mm/page_alloc: dont call pfn_to_page() on possibly non-existent PFN in split_large_buddy() Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 113/160] ring-buffer: Fix overflow in __rb_map_vma Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 114/160] alloc_tag: fix set_codetag_empty() when !CONFIG_MEM_ALLOC_PROFILING_DEBUG Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 115/160] btrfs: split bios to the fs sector size boundary Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 116/160] btrfs: fix improper generation check in snapshot delete Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 117/160] btrfs: tree-checker: reject inline extent items with 0 ref count Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 118/160] s390/mm: Fix DirectMap accounting Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 119/160] drm/amdgpu/nbio7.0: fix IP version check Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 120/160] drm/amdgpu/gfx12: " Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 121/160] drm/amdgpu/mmhub4.1: " Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 122/160] fgraph: Still initialize idle shadow stacks when starting Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 123/160] Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 124/160] tools: hv: Fix a complier warning in the fcopy uio daemon Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 125/160] x86/hyperv: Fix hv tsc page based sched_clock for hibernation Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 126/160] KVM: x86: Play nice with protected guests in complete_hypercall_exit() Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 127/160] smb: client: fix TCP timers deadlock after rmmod Greg Kroah-Hartman
2024-12-23 15:58 ` [PATCH 6.12 128/160] accel/ivpu: Fix general protection fault in ivpu_bo_list() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 129/160] accel/ivpu: Fix WARN in ivpu_ipc_send_receive_internal() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 130/160] tracing: Fix test_event_printk() to process entire print argument Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 131/160] tracing: Add missing helper functions in event pointer dereference check Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 132/160] tracing: Add "%s" check in test_event_printk() Greg Kroah-Hartman
2024-12-23 15:59 ` Greg Kroah-Hartman [this message]
2024-12-23 15:59 ` [PATCH 6.12 134/160] selftests/memfd: run sysctl tests when PID namespace support is enabled Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 135/160] selftests/bpf: Use asm constraint "m" for LoongArch Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 136/160] io_uring: Fix registered ring file refcount leak Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 137/160] io_uring: check if iowq is killed before queuing Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 138/160] NFS/pnfs: Fix a live lock between recalled layouts and layoutget Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 139/160] KVM: SVM: Allow guest writes to set MSR_AMD64_DE_CFG bits Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 140/160] of/irq: Fix interrupt-map cell length check in of_irq_parse_imap_parent() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 141/160] of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 142/160] ocfs2: fix the space leak in LA when releasing LA Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 143/160] nilfs2: fix buffer head leaks in calls to truncate_inode_pages() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 144/160] nilfs2: prevent use of deleted inode Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 145/160] udmabuf: fix racy memfd sealing check Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 146/160] udmabuf: also check for F_SEAL_FUTURE_WRITE Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 147/160] of: property: fw_devlink: Do not use interrupt-parent directly Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 148/160] of: address: Preserve the flags portion on 1:1 dma-ranges mapping Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 149/160] of: Fix error path in of_parse_phandle_with_args_map() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 150/160] of: Fix refcount leakage for OF node returned by __of_get_dma_parent() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 151/160] ceph: give up on paths longer than PATH_MAX Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 152/160] ceph: validate snapdirname option length when mounting Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 153/160] ceph: improve error handling and short/overflow-read logic in __ceph_sync_read() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 154/160] ceph: fix memory leaks " Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 155/160] ceph: fix memory leak in ceph_direct_read_write() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 156/160] mm: use aligned address in clear_gigantic_page() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 157/160] mm: use aligned address in copy_user_gigantic_page() Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 158/160] mm: shmem: fix ShmemHugePages at swapout Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 159/160] mm: convert partially_mapped set/clear operations to be atomic Greg Kroah-Hartman
2024-12-23 15:59 ` [PATCH 6.12 160/160] epoll: Add synchronous wakeup support for ep_poll_callback Greg Kroah-Hartman
2024-12-23 21:16 ` [PATCH 6.12 000/160] 6.12.7-rc1 review SeongJae Park
2024-12-23 22:39 ` Shuah Khan
2024-12-23 23:23 ` Takeshi Ogasawara
2024-12-24  8:42 ` Harshit Mogalapalli
2024-12-24 10:16 ` Ron Economos
2024-12-24 12:18 ` Peter Schneider
2024-12-24 12:25 ` Luna Jernberg
2024-12-24 13:26 ` Jon Hunter
2024-12-24 19:12 ` Naresh Kamboju
2024-12-26 13:41   ` Marc Zyngier
2024-12-27 13:04     ` Greg Kroah-Hartman
2024-12-27 13:23       ` Marc Zyngier
2024-12-27 13:34         ` Greg Kroah-Hartman
2024-12-27 13:43           ` Marc Zyngier
2024-12-27 13:49             ` Greg Kroah-Hartman
2024-12-27 17:27         ` Guenter Roeck
2024-12-24 21:36 ` Justin Forbes
2024-12-26 10:08 ` Muhammad Usama Anjum
2024-12-26 10:32 ` Markus Reichelt
2024-12-26 17:17 ` Florian Fainelli
2024-12-26 19:35 ` [PATCH 6.12] " Hardik Garg
2024-12-26 20:21 ` [PATCH 6.12 000/160] " Pavel Machek

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=20241223155413.925120191@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=mark.rutland@arm.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=rostedt@goodmis.org \
    --cc=stable@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@ZenIV.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox