Archive-only list for patches
 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 (Google)" <mhiramat@kernel.org>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.6 109/208] tracing/probes: Support $argN in return probe (kprobe and fprobe)
Date: Mon, 28 Oct 2024 07:24:49 +0100	[thread overview]
Message-ID: <20241028062309.343413956@linuxfoundation.org> (raw)
In-Reply-To: <20241028062306.649733554@linuxfoundation.org>

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

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

From: Masami Hiramatsu (Google) <mhiramat@kernel.org>

[ Upstream commit 25f00e40ce7953db197af3a59233711d154c9d80 ]

Support accessing $argN in the return probe events. This will help users to
record entry data in function return (exit) event for simplfing the function
entry/exit information in one event, and record the result values (e.g.
allocated object/initialized object) at function exit.

For example, if we have a function `int init_foo(struct foo *obj, int param)`
sometimes we want to check how `obj` is initialized. In such case, we can
define a new return event like below;

 # echo 'r init_foo retval=$retval param=$arg2 field1=+0($arg1)' >> kprobe_events

Thus it records the function parameter `param` and its result `obj->field1`
(the dereference will be done in the function exit timing) value at once.

This also support fprobe, BTF args and'$arg*'. So if CONFIG_DEBUG_INFO_BTF
is enabled, we can trace both function parameters and the return value
by following command.

 # echo 'f target_function%return $arg* $retval' >> dynamic_events

Link: https://lore.kernel.org/all/170952365552.229804.224112990211602895.stgit@devnote2/

Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Stable-dep-of: 373b9338c972 ("uprobe: avoid out-of-bounds memory access of fetching args")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 kernel/trace/trace.c                          |   1 +
 kernel/trace/trace_eprobe.c                   |   6 +-
 kernel/trace/trace_fprobe.c                   |  55 ++++--
 kernel/trace/trace_kprobe.c                   |  56 +++++-
 kernel/trace/trace_probe.c                    | 177 +++++++++++++++---
 kernel/trace/trace_probe.h                    |  28 ++-
 kernel/trace/trace_probe_tmpl.h               |  10 +-
 kernel/trace/trace_uprobe.c                   |  12 +-
 .../test.d/dynevent/fprobe_syntax_errors.tc   |   4 +
 .../test.d/kprobe/kprobe_syntax_errors.tc     |   2 +
 10 files changed, 289 insertions(+), 62 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 4f93d57cc0299..ecd869ed27670 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -5757,6 +5757,7 @@ static const char readme_msg[] =
 	"\t           $stack<index>, $stack, $retval, $comm,\n"
 #endif
 	"\t           +|-[u]<offset>(<fetcharg>), \\imm-value, \\\"imm-string\"\n"
+	"\t     kernel return probes support: $retval, $arg<N>, $comm\n"
 	"\t     type: s8/16/32/64, u8/16/32/64, x8/16/32/64, char, string, symbol,\n"
 	"\t           b<bit-width>@<bit-offset>/<container-size>, ustring,\n"
 	"\t           symstr, <type>\\[<array-size>\\]\n"
diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c
index 42b76f02e57a9..b03bc30f85ee3 100644
--- a/kernel/trace/trace_eprobe.c
+++ b/kernel/trace/trace_eprobe.c
@@ -390,8 +390,8 @@ static int get_eprobe_size(struct trace_probe *tp, void *rec)
 
 /* Note that we don't verify it, since the code does not come from user space */
 static int
-process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
-		   void *base)
+process_fetch_insn(struct fetch_insn *code, void *rec, void *edata,
+		   void *dest, void *base)
 {
 	unsigned long val;
 	int ret;
@@ -438,7 +438,7 @@ __eprobe_trace_func(struct eprobe_data *edata, void *rec)
 		return;
 
 	entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event);
-	store_trace_args(&entry[1], &edata->ep->tp, rec, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &edata->ep->tp, rec, NULL, sizeof(*entry), dsize);
 
 	trace_event_buffer_commit(&fbuffer);
 }
diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c
index 5109650b0d82d..4f42808155225 100644
--- a/kernel/trace/trace_fprobe.c
+++ b/kernel/trace/trace_fprobe.c
@@ -4,6 +4,7 @@
  * Copyright (C) 2022 Google LLC.
  */
 #define pr_fmt(fmt)	"trace_fprobe: " fmt
+#include <asm/ptrace.h>
 
 #include <linux/fprobe.h>
 #include <linux/module.h>
@@ -129,8 +130,8 @@ static bool trace_fprobe_is_registered(struct trace_fprobe *tf)
  * from user space.
  */
 static int
-process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
-		   void *base)
+process_fetch_insn(struct fetch_insn *code, void *rec, void *edata,
+		   void *dest, void *base)
 {
 	struct pt_regs *regs = rec;
 	unsigned long val;
@@ -152,6 +153,9 @@ process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
 	case FETCH_OP_ARG:
 		val = regs_get_kernel_argument(regs, code->param);
 		break;
+	case FETCH_OP_EDATA:
+		val = *(unsigned long *)((unsigned long)edata + code->offset);
+		break;
 #endif
 	case FETCH_NOP_SYMBOL:	/* Ignore a place holder */
 		code++;
@@ -184,7 +188,7 @@ __fentry_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	if (trace_trigger_soft_disabled(trace_file))
 		return;
 
-	dsize = __get_data_size(&tf->tp, regs);
+	dsize = __get_data_size(&tf->tp, regs, NULL);
 
 	entry = trace_event_buffer_reserve(&fbuffer, trace_file,
 					   sizeof(*entry) + tf->tp.size + dsize);
@@ -194,7 +198,7 @@ __fentry_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	fbuffer.regs = regs;
 	entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event);
 	entry->ip = entry_ip;
-	store_trace_args(&entry[1], &tf->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tf->tp, regs, NULL, sizeof(*entry), dsize);
 
 	trace_event_buffer_commit(&fbuffer);
 }
@@ -211,10 +215,23 @@ fentry_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 NOKPROBE_SYMBOL(fentry_trace_func);
 
 /* function exit handler */
+static int trace_fprobe_entry_handler(struct fprobe *fp, unsigned long entry_ip,
+				unsigned long ret_ip, struct pt_regs *regs,
+				void *entry_data)
+{
+	struct trace_fprobe *tf = container_of(fp, struct trace_fprobe, fp);
+
+	if (tf->tp.entry_arg)
+		store_trace_entry_data(entry_data, &tf->tp, regs);
+
+	return 0;
+}
+NOKPROBE_SYMBOL(trace_fprobe_entry_handler)
+
 static nokprobe_inline void
 __fexit_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 		   unsigned long ret_ip, struct pt_regs *regs,
-		   struct trace_event_file *trace_file)
+		   void *entry_data, struct trace_event_file *trace_file)
 {
 	struct fexit_trace_entry_head *entry;
 	struct trace_event_buffer fbuffer;
@@ -227,7 +244,7 @@ __fexit_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	if (trace_trigger_soft_disabled(trace_file))
 		return;
 
-	dsize = __get_data_size(&tf->tp, regs);
+	dsize = __get_data_size(&tf->tp, regs, entry_data);
 
 	entry = trace_event_buffer_reserve(&fbuffer, trace_file,
 					   sizeof(*entry) + tf->tp.size + dsize);
@@ -238,19 +255,19 @@ __fexit_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event);
 	entry->func = entry_ip;
 	entry->ret_ip = ret_ip;
-	store_trace_args(&entry[1], &tf->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tf->tp, regs, entry_data, sizeof(*entry), dsize);
 
 	trace_event_buffer_commit(&fbuffer);
 }
 
 static void
 fexit_trace_func(struct trace_fprobe *tf, unsigned long entry_ip,
-		 unsigned long ret_ip, struct pt_regs *regs)
+		 unsigned long ret_ip, struct pt_regs *regs, void *entry_data)
 {
 	struct event_file_link *link;
 
 	trace_probe_for_each_link_rcu(link, &tf->tp)
-		__fexit_trace_func(tf, entry_ip, ret_ip, regs, link->file);
+		__fexit_trace_func(tf, entry_ip, ret_ip, regs, entry_data, link->file);
 }
 NOKPROBE_SYMBOL(fexit_trace_func);
 
@@ -269,7 +286,7 @@ static int fentry_perf_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	if (hlist_empty(head))
 		return 0;
 
-	dsize = __get_data_size(&tf->tp, regs);
+	dsize = __get_data_size(&tf->tp, regs, NULL);
 	__size = sizeof(*entry) + tf->tp.size + dsize;
 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
 	size -= sizeof(u32);
@@ -280,7 +297,7 @@ static int fentry_perf_func(struct trace_fprobe *tf, unsigned long entry_ip,
 
 	entry->ip = entry_ip;
 	memset(&entry[1], 0, dsize);
-	store_trace_args(&entry[1], &tf->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tf->tp, regs, NULL, sizeof(*entry), dsize);
 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
 			      head, NULL);
 	return 0;
@@ -289,7 +306,8 @@ NOKPROBE_SYMBOL(fentry_perf_func);
 
 static void
 fexit_perf_func(struct trace_fprobe *tf, unsigned long entry_ip,
-		unsigned long ret_ip, struct pt_regs *regs)
+		unsigned long ret_ip, struct pt_regs *regs,
+		void *entry_data)
 {
 	struct trace_event_call *call = trace_probe_event_call(&tf->tp);
 	struct fexit_trace_entry_head *entry;
@@ -301,7 +319,7 @@ fexit_perf_func(struct trace_fprobe *tf, unsigned long entry_ip,
 	if (hlist_empty(head))
 		return;
 
-	dsize = __get_data_size(&tf->tp, regs);
+	dsize = __get_data_size(&tf->tp, regs, entry_data);
 	__size = sizeof(*entry) + tf->tp.size + dsize;
 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
 	size -= sizeof(u32);
@@ -312,7 +330,7 @@ fexit_perf_func(struct trace_fprobe *tf, unsigned long entry_ip,
 
 	entry->func = entry_ip;
 	entry->ret_ip = ret_ip;
-	store_trace_args(&entry[1], &tf->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tf->tp, regs, entry_data, sizeof(*entry), dsize);
 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
 			      head, NULL);
 }
@@ -343,10 +361,10 @@ static void fexit_dispatcher(struct fprobe *fp, unsigned long entry_ip,
 	struct trace_fprobe *tf = container_of(fp, struct trace_fprobe, fp);
 
 	if (trace_probe_test_flag(&tf->tp, TP_FLAG_TRACE))
-		fexit_trace_func(tf, entry_ip, ret_ip, regs);
+		fexit_trace_func(tf, entry_ip, ret_ip, regs, entry_data);
 #ifdef CONFIG_PERF_EVENTS
 	if (trace_probe_test_flag(&tf->tp, TP_FLAG_PROFILE))
-		fexit_perf_func(tf, entry_ip, ret_ip, regs);
+		fexit_perf_func(tf, entry_ip, ret_ip, regs, entry_data);
 #endif
 }
 NOKPROBE_SYMBOL(fexit_dispatcher);
@@ -1109,6 +1127,11 @@ static int __trace_fprobe_create(int argc, const char *argv[])
 			goto error;	/* This can be -ENOMEM */
 	}
 
+	if (is_return && tf->tp.entry_arg) {
+		tf->fp.entry_handler = trace_fprobe_entry_handler;
+		tf->fp.entry_data_size = traceprobe_get_entry_data_size(&tf->tp);
+	}
+
 	ret = traceprobe_set_print_fmt(&tf->tp,
 			is_return ? PROBE_PRINT_RETURN : PROBE_PRINT_NORMAL);
 	if (ret < 0)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index d1a7c876e4198..32c617123f374 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -740,6 +740,9 @@ static unsigned int number_of_same_symbols(char *func_name)
 	return ctx.count;
 }
 
+static int trace_kprobe_entry_handler(struct kretprobe_instance *ri,
+				      struct pt_regs *regs);
+
 static int __trace_kprobe_create(int argc, const char *argv[])
 {
 	/*
@@ -948,6 +951,11 @@ static int __trace_kprobe_create(int argc, const char *argv[])
 		if (ret)
 			goto error;	/* This can be -ENOMEM */
 	}
+	/* entry handler for kretprobe */
+	if (is_return && tk->tp.entry_arg) {
+		tk->rp.entry_handler = trace_kprobe_entry_handler;
+		tk->rp.data_size = traceprobe_get_entry_data_size(&tk->tp);
+	}
 
 	ptype = is_return ? PROBE_PRINT_RETURN : PROBE_PRINT_NORMAL;
 	ret = traceprobe_set_print_fmt(&tk->tp, ptype);
@@ -1303,8 +1311,8 @@ static const struct file_operations kprobe_profile_ops = {
 
 /* Note that we don't verify it, since the code does not come from user space */
 static int
-process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
-		   void *base)
+process_fetch_insn(struct fetch_insn *code, void *rec, void *edata,
+		   void *dest, void *base)
 {
 	struct pt_regs *regs = rec;
 	unsigned long val;
@@ -1329,6 +1337,9 @@ process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
 	case FETCH_OP_ARG:
 		val = regs_get_kernel_argument(regs, code->param);
 		break;
+	case FETCH_OP_EDATA:
+		val = *(unsigned long *)((unsigned long)edata + code->offset);
+		break;
 #endif
 	case FETCH_NOP_SYMBOL:	/* Ignore a place holder */
 		code++;
@@ -1359,7 +1370,7 @@ __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
 	if (trace_trigger_soft_disabled(trace_file))
 		return;
 
-	dsize = __get_data_size(&tk->tp, regs);
+	dsize = __get_data_size(&tk->tp, regs, NULL);
 
 	entry = trace_event_buffer_reserve(&fbuffer, trace_file,
 					   sizeof(*entry) + tk->tp.size + dsize);
@@ -1368,7 +1379,7 @@ __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
 
 	fbuffer.regs = regs;
 	entry->ip = (unsigned long)tk->rp.kp.addr;
-	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tk->tp, regs, NULL, sizeof(*entry), dsize);
 
 	trace_event_buffer_commit(&fbuffer);
 }
@@ -1384,6 +1395,31 @@ kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs)
 NOKPROBE_SYMBOL(kprobe_trace_func);
 
 /* Kretprobe handler */
+
+static int trace_kprobe_entry_handler(struct kretprobe_instance *ri,
+				      struct pt_regs *regs)
+{
+	struct kretprobe *rp = get_kretprobe(ri);
+	struct trace_kprobe *tk;
+
+	/*
+	 * There is a small chance that get_kretprobe(ri) returns NULL when
+	 * the kretprobe is unregister on another CPU between kretprobe's
+	 * trampoline_handler and this function.
+	 */
+	if (unlikely(!rp))
+		return -ENOENT;
+
+	tk = container_of(rp, struct trace_kprobe, rp);
+
+	/* store argument values into ri->data as entry data */
+	if (tk->tp.entry_arg)
+		store_trace_entry_data(ri->data, &tk->tp, regs);
+
+	return 0;
+}
+
+
 static nokprobe_inline void
 __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
 		       struct pt_regs *regs,
@@ -1399,7 +1435,7 @@ __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
 	if (trace_trigger_soft_disabled(trace_file))
 		return;
 
-	dsize = __get_data_size(&tk->tp, regs);
+	dsize = __get_data_size(&tk->tp, regs, ri->data);
 
 	entry = trace_event_buffer_reserve(&fbuffer, trace_file,
 					   sizeof(*entry) + tk->tp.size + dsize);
@@ -1409,7 +1445,7 @@ __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
 	fbuffer.regs = regs;
 	entry->func = (unsigned long)tk->rp.kp.addr;
 	entry->ret_ip = get_kretprobe_retaddr(ri);
-	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tk->tp, regs, ri->data, sizeof(*entry), dsize);
 
 	trace_event_buffer_commit(&fbuffer);
 }
@@ -1557,7 +1593,7 @@ kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
 	if (hlist_empty(head))
 		return 0;
 
-	dsize = __get_data_size(&tk->tp, regs);
+	dsize = __get_data_size(&tk->tp, regs, NULL);
 	__size = sizeof(*entry) + tk->tp.size + dsize;
 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
 	size -= sizeof(u32);
@@ -1568,7 +1604,7 @@ kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
 
 	entry->ip = (unsigned long)tk->rp.kp.addr;
 	memset(&entry[1], 0, dsize);
-	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tk->tp, regs, NULL, sizeof(*entry), dsize);
 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
 			      head, NULL);
 	return 0;
@@ -1593,7 +1629,7 @@ kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
 	if (hlist_empty(head))
 		return;
 
-	dsize = __get_data_size(&tk->tp, regs);
+	dsize = __get_data_size(&tk->tp, regs, ri->data);
 	__size = sizeof(*entry) + tk->tp.size + dsize;
 	size = ALIGN(__size + sizeof(u32), sizeof(u64));
 	size -= sizeof(u32);
@@ -1604,7 +1640,7 @@ kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
 
 	entry->func = (unsigned long)tk->rp.kp.addr;
 	entry->ret_ip = get_kretprobe_retaddr(ri);
-	store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize);
+	store_trace_args(&entry[1], &tk->tp, regs, ri->data, sizeof(*entry), dsize);
 	perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
 			      head, NULL);
 }
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index 5d6c6c105f3cd..58a6275c7f496 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -598,6 +598,8 @@ static int parse_btf_field(char *fieldname, const struct btf_type *type,
 	return 0;
 }
 
+static int __store_entry_arg(struct trace_probe *tp, int argnum);
+
 static int parse_btf_arg(char *varname,
 			 struct fetch_insn **pcode, struct fetch_insn *end,
 			 struct traceprobe_parse_context *ctx)
@@ -622,11 +624,7 @@ static int parse_btf_arg(char *varname,
 		return -EOPNOTSUPP;
 	}
 
-	if (ctx->flags & TPARG_FL_RETURN) {
-		if (strcmp(varname, "$retval") != 0) {
-			trace_probe_log_err(ctx->offset, NO_BTFARG);
-			return -ENOENT;
-		}
+	if (ctx->flags & TPARG_FL_RETURN && !strcmp(varname, "$retval")) {
 		code->op = FETCH_OP_RETVAL;
 		/* Check whether the function return type is not void */
 		if (query_btf_context(ctx) == 0) {
@@ -658,11 +656,21 @@ static int parse_btf_arg(char *varname,
 		const char *name = btf_name_by_offset(ctx->btf, params[i].name_off);
 
 		if (name && !strcmp(name, varname)) {
-			code->op = FETCH_OP_ARG;
-			if (ctx->flags & TPARG_FL_TPOINT)
-				code->param = i + 1;
-			else
-				code->param = i;
+			if (tparg_is_function_entry(ctx->flags)) {
+				code->op = FETCH_OP_ARG;
+				if (ctx->flags & TPARG_FL_TPOINT)
+					code->param = i + 1;
+				else
+					code->param = i;
+			} else if (tparg_is_function_return(ctx->flags)) {
+				code->op = FETCH_OP_EDATA;
+				ret = __store_entry_arg(ctx->tp, i);
+				if (ret < 0) {
+					/* internal error */
+					return ret;
+				}
+				code->offset = ret;
+			}
 			tid = params[i].type;
 			goto found;
 		}
@@ -759,6 +767,110 @@ static int check_prepare_btf_string_fetch(char *typename,
 
 #endif
 
+#ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
+
+static int __store_entry_arg(struct trace_probe *tp, int argnum)
+{
+	struct probe_entry_arg *earg = tp->entry_arg;
+	bool match = false;
+	int i, offset;
+
+	if (!earg) {
+		earg = kzalloc(sizeof(*tp->entry_arg), GFP_KERNEL);
+		if (!earg)
+			return -ENOMEM;
+		earg->size = 2 * tp->nr_args + 1;
+		earg->code = kcalloc(earg->size, sizeof(struct fetch_insn),
+				     GFP_KERNEL);
+		if (!earg->code) {
+			kfree(earg);
+			return -ENOMEM;
+		}
+		/* Fill the code buffer with 'end' to simplify it */
+		for (i = 0; i < earg->size; i++)
+			earg->code[i].op = FETCH_OP_END;
+		tp->entry_arg = earg;
+	}
+
+	offset = 0;
+	for (i = 0; i < earg->size - 1; i++) {
+		switch (earg->code[i].op) {
+		case FETCH_OP_END:
+			earg->code[i].op = FETCH_OP_ARG;
+			earg->code[i].param = argnum;
+			earg->code[i + 1].op = FETCH_OP_ST_EDATA;
+			earg->code[i + 1].offset = offset;
+			return offset;
+		case FETCH_OP_ARG:
+			match = (earg->code[i].param == argnum);
+			break;
+		case FETCH_OP_ST_EDATA:
+			offset = earg->code[i].offset;
+			if (match)
+				return offset;
+			offset += sizeof(unsigned long);
+			break;
+		default:
+			break;
+		}
+	}
+	return -ENOSPC;
+}
+
+int traceprobe_get_entry_data_size(struct trace_probe *tp)
+{
+	struct probe_entry_arg *earg = tp->entry_arg;
+	int i, size = 0;
+
+	if (!earg)
+		return 0;
+
+	for (i = 0; i < earg->size; i++) {
+		switch (earg->code[i].op) {
+		case FETCH_OP_END:
+			goto out;
+		case FETCH_OP_ST_EDATA:
+			size = earg->code[i].offset + sizeof(unsigned long);
+			break;
+		default:
+			break;
+		}
+	}
+out:
+	return size;
+}
+
+void store_trace_entry_data(void *edata, struct trace_probe *tp, struct pt_regs *regs)
+{
+	struct probe_entry_arg *earg = tp->entry_arg;
+	unsigned long val;
+	int i;
+
+	if (!earg)
+		return;
+
+	for (i = 0; i < earg->size; i++) {
+		struct fetch_insn *code = &earg->code[i];
+
+		switch (code->op) {
+		case FETCH_OP_ARG:
+			val = regs_get_kernel_argument(regs, code->param);
+			break;
+		case FETCH_OP_ST_EDATA:
+			*(unsigned long *)((unsigned long)edata + code->offset) = val;
+			break;
+		case FETCH_OP_END:
+			goto end;
+		default:
+			break;
+		}
+	}
+end:
+	return;
+}
+NOKPROBE_SYMBOL(store_trace_entry_data)
+#endif
+
 #define PARAM_MAX_STACK (THREAD_SIZE / sizeof(unsigned long))
 
 /* Parse $vars. @orig_arg points '$', which syncs to @ctx->offset */
@@ -834,7 +946,7 @@ static int parse_probe_vars(char *orig_arg, const struct fetch_type *t,
 
 #ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
 	len = str_has_prefix(arg, "arg");
-	if (len && tparg_is_function_entry(ctx->flags)) {
+	if (len) {
 		ret = kstrtoul(arg + len, 10, &param);
 		if (ret)
 			goto inval;
@@ -843,15 +955,29 @@ static int parse_probe_vars(char *orig_arg, const struct fetch_type *t,
 			err = TP_ERR_BAD_ARG_NUM;
 			goto inval;
 		}
+		param--; /* argN starts from 1, but internal arg[N] starts from 0 */
 
-		code->op = FETCH_OP_ARG;
-		code->param = (unsigned int)param - 1;
-		/*
-		 * The tracepoint probe will probe a stub function, and the
-		 * first parameter of the stub is a dummy and should be ignored.
-		 */
-		if (ctx->flags & TPARG_FL_TPOINT)
-			code->param++;
+		if (tparg_is_function_entry(ctx->flags)) {
+			code->op = FETCH_OP_ARG;
+			code->param = (unsigned int)param;
+			/*
+			 * The tracepoint probe will probe a stub function, and the
+			 * first parameter of the stub is a dummy and should be ignored.
+			 */
+			if (ctx->flags & TPARG_FL_TPOINT)
+				code->param++;
+		} else if (tparg_is_function_return(ctx->flags)) {
+			/* function entry argument access from return probe */
+			ret = __store_entry_arg(ctx->tp, param);
+			if (ret < 0)	/* This error should be an internal error */
+				return ret;
+
+			code->op = FETCH_OP_EDATA;
+			code->offset = ret;
+		} else {
+			err = TP_ERR_NOFENTRY_ARGS;
+			goto inval;
+		}
 		return 0;
 	}
 #endif
@@ -1041,7 +1167,8 @@ parse_probe_arg(char *arg, const struct fetch_type *type,
 		break;
 	default:
 		if (isalpha(arg[0]) || arg[0] == '_') {	/* BTF variable */
-			if (!tparg_is_function_entry(ctx->flags)) {
+			if (!tparg_is_function_entry(ctx->flags) &&
+			    !tparg_is_function_return(ctx->flags)) {
 				trace_probe_log_err(ctx->offset, NOSUP_BTFARG);
 				return -EINVAL;
 			}
@@ -1383,6 +1510,7 @@ int traceprobe_parse_probe_arg(struct trace_probe *tp, int i, const char *arg,
 	struct probe_arg *parg = &tp->args[i];
 	const char *body;
 
+	ctx->tp = tp;
 	body = strchr(arg, '=');
 	if (body) {
 		if (body - arg > MAX_ARG_NAME_LEN) {
@@ -1439,7 +1567,8 @@ static int argv_has_var_arg(int argc, const char *argv[], int *args_idx,
 		if (str_has_prefix(argv[i], "$arg")) {
 			trace_probe_log_set_index(i + 2);
 
-			if (!tparg_is_function_entry(ctx->flags)) {
+			if (!tparg_is_function_entry(ctx->flags) &&
+			    !tparg_is_function_return(ctx->flags)) {
 				trace_probe_log_err(0, NOFENTRY_ARGS);
 				return -EINVAL;
 			}
@@ -1762,6 +1891,12 @@ void trace_probe_cleanup(struct trace_probe *tp)
 	for (i = 0; i < tp->nr_args; i++)
 		traceprobe_free_probe_arg(&tp->args[i]);
 
+	if (tp->entry_arg) {
+		kfree(tp->entry_arg->code);
+		kfree(tp->entry_arg);
+		tp->entry_arg = NULL;
+	}
+
 	if (tp->event)
 		trace_probe_unlink(tp);
 }
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index ed8d1052f8a78..cef3a50628a3e 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -92,6 +92,7 @@ enum fetch_op {
 	FETCH_OP_ARG,		/* Function argument : .param */
 	FETCH_OP_FOFFS,		/* File offset: .immediate */
 	FETCH_OP_DATA,		/* Allocated data: .data */
+	FETCH_OP_EDATA,		/* Entry data: .offset */
 	// Stage 2 (dereference) op
 	FETCH_OP_DEREF,		/* Dereference: .offset */
 	FETCH_OP_UDEREF,	/* User-space Dereference: .offset */
@@ -102,6 +103,7 @@ enum fetch_op {
 	FETCH_OP_ST_STRING,	/* String: .offset, .size */
 	FETCH_OP_ST_USTRING,	/* User String: .offset, .size */
 	FETCH_OP_ST_SYMSTR,	/* Kernel Symbol String: .offset, .size */
+	FETCH_OP_ST_EDATA,	/* Store Entry Data: .offset */
 	// Stage 4 (modify) op
 	FETCH_OP_MOD_BF,	/* Bitfield: .basesize, .lshift, .rshift */
 	// Stage 5 (loop) op
@@ -232,6 +234,11 @@ struct probe_arg {
 	const struct fetch_type	*type;	/* Type of this argument */
 };
 
+struct probe_entry_arg {
+	struct fetch_insn	*code;
+	unsigned int		size;	/* The entry data size */
+};
+
 struct trace_uprobe_filter {
 	rwlock_t		rwlock;
 	int			nr_systemwide;
@@ -253,6 +260,7 @@ struct trace_probe {
 	struct trace_probe_event	*event;
 	ssize_t				size;	/* trace entry size */
 	unsigned int			nr_args;
+	struct probe_entry_arg		*entry_arg;	/* This is only for return probe */
 	struct probe_arg		args[];
 };
 
@@ -355,6 +363,18 @@ int trace_probe_create(const char *raw_command, int (*createfn)(int, const char
 int trace_probe_print_args(struct trace_seq *s, struct probe_arg *args, int nr_args,
 		 u8 *data, void *field);
 
+#ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
+int traceprobe_get_entry_data_size(struct trace_probe *tp);
+/* This is a runtime function to store entry data */
+void store_trace_entry_data(void *edata, struct trace_probe *tp, struct pt_regs *regs);
+#else /* !CONFIG_HAVE_FUNCTION_ARG_ACCESS_API */
+static inline int traceprobe_get_entry_data_size(struct trace_probe *tp)
+{
+	return 0;
+}
+#define store_trace_entry_data(edata, tp, regs) do { } while (0)
+#endif
+
 #define trace_probe_for_each_link(pos, tp)	\
 	list_for_each_entry(pos, &(tp)->event->files, list)
 #define trace_probe_for_each_link_rcu(pos, tp)	\
@@ -381,6 +401,11 @@ static inline bool tparg_is_function_entry(unsigned int flags)
 	return (flags & TPARG_FL_LOC_MASK) == (TPARG_FL_KERNEL | TPARG_FL_FENTRY);
 }
 
+static inline bool tparg_is_function_return(unsigned int flags)
+{
+	return (flags & TPARG_FL_LOC_MASK) == (TPARG_FL_KERNEL | TPARG_FL_RETURN);
+}
+
 struct traceprobe_parse_context {
 	struct trace_event_call *event;
 	/* BTF related parameters */
@@ -392,6 +417,7 @@ struct traceprobe_parse_context {
 	const struct btf_type *last_type;	/* Saved type */
 	u32 last_bitoffs;		/* Saved bitoffs */
 	u32 last_bitsize;		/* Saved bitsize */
+	struct trace_probe *tp;
 	unsigned int flags;
 	int offset;
 };
@@ -506,7 +532,7 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call,
 	C(NO_BTFARG,		"This variable is not found at this probe point"),\
 	C(NO_BTF_ENTRY,		"No BTF entry for this probe point"),	\
 	C(BAD_VAR_ARGS,		"$arg* must be an independent parameter without name etc."),\
-	C(NOFENTRY_ARGS,	"$arg* can be used only on function entry"),	\
+	C(NOFENTRY_ARGS,	"$arg* can be used only on function entry or exit"),	\
 	C(DOUBLE_ARGS,		"$arg* can be used only once in the parameters"),	\
 	C(ARGS_2LONG,		"$arg* failed because the argument list is too long"),	\
 	C(ARGIDX_2BIG,		"$argN index is too big"),		\
diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h
index 3935b347f874b..2caf0d2afb322 100644
--- a/kernel/trace/trace_probe_tmpl.h
+++ b/kernel/trace/trace_probe_tmpl.h
@@ -54,7 +54,7 @@ fetch_apply_bitfield(struct fetch_insn *code, void *buf)
  * If dest is NULL, don't store result and return required dynamic data size.
  */
 static int
-process_fetch_insn(struct fetch_insn *code, void *rec,
+process_fetch_insn(struct fetch_insn *code, void *rec, void *edata,
 		   void *dest, void *base);
 static nokprobe_inline int fetch_store_strlen(unsigned long addr);
 static nokprobe_inline int
@@ -232,7 +232,7 @@ process_fetch_insn_bottom(struct fetch_insn *code, unsigned long val,
 
 /* Sum up total data length for dynamic arrays (strings) */
 static nokprobe_inline int
-__get_data_size(struct trace_probe *tp, struct pt_regs *regs)
+__get_data_size(struct trace_probe *tp, struct pt_regs *regs, void *edata)
 {
 	struct probe_arg *arg;
 	int i, len, ret = 0;
@@ -240,7 +240,7 @@ __get_data_size(struct trace_probe *tp, struct pt_regs *regs)
 	for (i = 0; i < tp->nr_args; i++) {
 		arg = tp->args + i;
 		if (unlikely(arg->dynamic)) {
-			len = process_fetch_insn(arg->code, regs, NULL, NULL);
+			len = process_fetch_insn(arg->code, regs, edata, NULL, NULL);
 			if (len > 0)
 				ret += len;
 		}
@@ -251,7 +251,7 @@ __get_data_size(struct trace_probe *tp, struct pt_regs *regs)
 
 /* Store the value of each argument */
 static nokprobe_inline void
-store_trace_args(void *data, struct trace_probe *tp, void *rec,
+store_trace_args(void *data, struct trace_probe *tp, void *rec, void *edata,
 		 int header_size, int maxlen)
 {
 	struct probe_arg *arg;
@@ -266,7 +266,7 @@ store_trace_args(void *data, struct trace_probe *tp, void *rec,
 		/* Point the dynamic data area if needed */
 		if (unlikely(arg->dynamic))
 			*dl = make_data_loc(maxlen, dyndata - base);
-		ret = process_fetch_insn(arg->code, rec, dl, base);
+		ret = process_fetch_insn(arg->code, rec, edata, dl, base);
 		if (arg->dynamic && likely(ret > 0)) {
 			dyndata += ret;
 			maxlen -= ret;
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 49d9af6d446e9..78d76d74f45bc 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -211,8 +211,8 @@ static unsigned long translate_user_vaddr(unsigned long file_offset)
 
 /* Note that we don't verify it, since the code does not come from user space */
 static int
-process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
-		   void *base)
+process_fetch_insn(struct fetch_insn *code, void *rec, void *edata,
+		   void *dest, void *base)
 {
 	struct pt_regs *regs = rec;
 	unsigned long val;
@@ -1490,11 +1490,11 @@ static int uprobe_dispatcher(struct uprobe_consumer *con, struct pt_regs *regs)
 	if (WARN_ON_ONCE(!uprobe_cpu_buffer))
 		return 0;
 
-	dsize = __get_data_size(&tu->tp, regs);
+	dsize = __get_data_size(&tu->tp, regs, NULL);
 	esize = SIZEOF_TRACE_ENTRY(is_ret_probe(tu));
 
 	ucb = uprobe_buffer_get();
-	store_trace_args(ucb->buf, &tu->tp, regs, esize, dsize);
+	store_trace_args(ucb->buf, &tu->tp, regs, NULL, esize, dsize);
 
 	if (trace_probe_test_flag(&tu->tp, TP_FLAG_TRACE))
 		ret |= uprobe_trace_func(tu, regs, ucb, dsize);
@@ -1525,11 +1525,11 @@ static int uretprobe_dispatcher(struct uprobe_consumer *con,
 	if (WARN_ON_ONCE(!uprobe_cpu_buffer))
 		return 0;
 
-	dsize = __get_data_size(&tu->tp, regs);
+	dsize = __get_data_size(&tu->tp, regs, NULL);
 	esize = SIZEOF_TRACE_ENTRY(is_ret_probe(tu));
 
 	ucb = uprobe_buffer_get();
-	store_trace_args(ucb->buf, &tu->tp, regs, esize, dsize);
+	store_trace_args(ucb->buf, &tu->tp, regs, NULL, esize, dsize);
 
 	if (trace_probe_test_flag(&tu->tp, TP_FLAG_TRACE))
 		uretprobe_trace_func(tu, func, regs, ucb, dsize);
diff --git a/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc b/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc
index 20e42c030095b..61877d1664511 100644
--- a/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc
+++ b/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc
@@ -34,7 +34,9 @@ check_error 'f vfs_read ^$stack10000'	# BAD_STACK_NUM
 
 check_error 'f vfs_read ^$arg10000'	# BAD_ARG_NUM
 
+if !grep -q 'kernel return probes support:' README; then
 check_error 'f vfs_read $retval ^$arg1' # BAD_VAR
+fi
 check_error 'f vfs_read ^$none_var'	# BAD_VAR
 check_error 'f vfs_read ^'$REG		# BAD_VAR
 
@@ -99,7 +101,9 @@ if grep -q "<argname>" README; then
 check_error 'f vfs_read args=^$arg*'		# BAD_VAR_ARGS
 check_error 'f vfs_read +0(^$arg*)'		# BAD_VAR_ARGS
 check_error 'f vfs_read $arg* ^$arg*'		# DOUBLE_ARGS
+if !grep -q 'kernel return probes support:' README; then
 check_error 'f vfs_read%return ^$arg*'		# NOFENTRY_ARGS
+fi
 check_error 'f vfs_read ^hoge'			# NO_BTFARG
 check_error 'f kfree ^$arg10'			# NO_BTFARG (exceed the number of parameters)
 check_error 'f kfree%return ^$retval'		# NO_RETVAL
diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc
index 65fbb26fd58c1..a16c6a6f6055c 100644
--- a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc
+++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc
@@ -108,7 +108,9 @@ if grep -q "<argname>" README; then
 check_error 'p vfs_read args=^$arg*'		# BAD_VAR_ARGS
 check_error 'p vfs_read +0(^$arg*)'		# BAD_VAR_ARGS
 check_error 'p vfs_read $arg* ^$arg*'		# DOUBLE_ARGS
+if !grep -q 'kernel return probes support:' README; then
 check_error 'r vfs_read ^$arg*'			# NOFENTRY_ARGS
+fi
 check_error 'p vfs_read+8 ^$arg*'		# NOFENTRY_ARGS
 check_error 'p vfs_read ^hoge'			# NO_BTFARG
 check_error 'p kfree ^$arg10'			# NO_BTFARG (exceed the number of parameters)
-- 
2.43.0




  parent reply	other threads:[~2024-10-28  6:41 UTC|newest]

Thread overview: 224+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-28  6:23 [PATCH 6.6 000/208] 6.6.59-rc1 review Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 001/208] iio: accel: bma400: Fix uninitialized variable field_value in tap event handling Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 002/208] bpf: Make sure internal and UAPI bpf_redirect flags dont overlap Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 003/208] bpf: devmap: provide rxq after redirect Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 004/208] cpufreq/amd-pstate: Fix amd_pstate mode switch on shared memory systems Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 005/208] lib/Kconfig.debug: fix grammar in RUST_BUILD_ASSERT_ALLOW Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 006/208] bpf: Fix memory leak in bpf_core_apply Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 007/208] RDMA/bnxt_re: Fix a possible memory leak Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 008/208] RDMA/bnxt_re: Fix incorrect AVID type in WQE structure Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 009/208] RDMA/bnxt_re: Add a check for memory allocation Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 010/208] RDMA/core: Fix ENODEV error for iWARP test over vlan Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 011/208] x86/resctrl: Avoid overflow in MB settings in bw_validate() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 012/208] ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 013/208] bpf: Add missed value to kprobe perf link info Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 014/208] bpf: Add cookie to perf_event bpf_link_info records Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 015/208] bpf: fix unpopulated name_len field in perf_event link info Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 016/208] selftests/bpf: Use bpf_link__destroy in fill_link_info tests Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 017/208] selftests/bpf: Add cookies check for perf_event fill_link_info test Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 018/208] selftests/bpf: fix perf_event link info name_len assertion Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 019/208] s390/pci: Handle PCI error codes other than 0x3a Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 020/208] bpf: fix kfunc btf caching for modules Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 021/208] iio: frequency: {admv4420,adrf6780}: format Kconfig entries Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 022/208] iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 023/208] drm/vmwgfx: Handle possible ENOMEM in vmw_stdu_connector_atomic_check Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 024/208] selftests/bpf: Fix cross-compiling urandom_read Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 025/208] task_work: Add TWA_NMI_CURRENT as an additional notify mode Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 026/208] sched/core: Disable page allocation in task_tick_mm_cid() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 027/208] ALSA: hda/cs8409: Fix possible NULL dereference Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 028/208] firmware: arm_scmi: Fix the double free in scmi_debugfs_common_setup() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 029/208] RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 030/208] RDMA/irdma: Fix misspelling of "accept*" Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 031/208] RDMA/srpt: Make slab cache names unique Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 032/208] ipv4: give an IPv4 dev to blackhole_netdev Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 033/208] RDMA/bnxt_re: Support new 5760X P7 devices Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 034/208] RDMA/bnxt_re: Fix the max CQ WQEs for older adapters Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 035/208] RDMA/bnxt_re: Fix out of bound check Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 036/208] RDMA/bnxt_re: Return more meaningful error Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 037/208] RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 038/208] RDMA/bnxt_re: Update the BAR offsets Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 039/208] RDMA/bnxt_re: Fix the GID table length Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 040/208] accel/qaic: Fix the for loop used to walk SG table Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 041/208] drm/msm/dpu: make sure phys resources are properly initialized Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 042/208] drm/msm/dpu: check for overflow in _dpu_crtc_setup_lm_bounds() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 043/208] drm/msm/dsi: improve/fix dsc pclk calculation Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 044/208] drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 045/208] drm/msm: Avoid NULL dereference in msm_disp_state_print_regs() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 046/208] drm/msm: Allocate memory for disp snapshot with kvzalloc() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 047/208] firmware: arm_scmi: Queue in scmi layer for mailbox implementation Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 048/208] net/smc: Fix memory leak when using percpu refs Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 049/208] net: usb: usbnet: fix race in probe failure Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 050/208] net: stmmac: dwmac-tegra: Fix link bring-up sequence Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 051/208] octeontx2-af: Fix potential integer overflows on integer shifts Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 052/208] drm/amd/amdgpu: Fix double unlock in amdgpu_mes_add_ring Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 053/208] macsec: dont increment counters for an unrelated SA Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 054/208] netdevsim: use cond_resched() in nsim_dev_trap_report_work() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 055/208] net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 056/208] net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 057/208] net: xilinx: axienet: fix potential memory leak in axienet_start_xmit() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 058/208] bpf: Fix truncation bug in coerce_reg_to_size_sx() Greg Kroah-Hartman
2024-10-28  6:23 ` [PATCH 6.6 059/208] net: systemport: fix potential memory leak in bcm_sysport_xmit() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 060/208] irqchip/renesas-rzg2l: Align struct member names to tabs Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 061/208] irqchip/renesas-rzg2l: Document structure members Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 062/208] irqchip/renesas-rzg2l: Add support for suspend to RAM Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 063/208] irqchip/renesas-rzg2l: Fix missing put_device Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 064/208] drm/msm/dpu: dont always program merge_3d block Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 065/208] net: bcmasp: fix potential memory leak in bcmasp_xmit() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 066/208] tcp/dccp: Dont use timer_pending() in reqsk_queue_unlink() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 067/208] net: dsa: mv88e6xxx: Fix the max_vid definition for the MV88E6361 Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 068/208] genetlink: hold RCU in genlmsg_mcast() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 069/208] ravb: Remove setting of RX software timestamp Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 070/208] net: ravb: Only advertise Rx/Tx timestamps if hardware supports it Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 071/208] scsi: target: core: Fix null-ptr-deref in target_alloc_device() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 072/208] smb: client: fix possible double free in smb2_set_ea() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 073/208] smb: client: fix OOBs when building SMB2_IOCTL request Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 074/208] usb: typec: altmode should keep reference to parent Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 075/208] s390: Initialize psw mask in perf_arch_fetch_caller_regs() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 076/208] bpf: Fix link info netfilter flags to populate defrag flag Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 077/208] Bluetooth: bnep: fix wild-memory-access in proto_unregister Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 078/208] vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 079/208] net/mlx5: Check for invalid vector index on EQ creation Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 080/208] net/mlx5: Fix command bitmask initialization Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 081/208] net/mlx5: Unregister notifier on eswitch init failure Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 082/208] bpf, sockmap: SK_DROP on attempted redirects of unsupported af_vsock Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 083/208] vsock: Update rx_bytes on read_skb() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 084/208] vsock: Update msg_count " Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 085/208] bpf, vsock: Drop static vsock_bpf_prot initialization Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 086/208] riscv, bpf: Make BPF_CMPXCHG fully ordered Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 087/208] nvme-pci: set doorbell config before unquiescing Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 088/208] nvme-pci: fix race condition between reset and nvme_dev_disable() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 089/208] bpf: Fix iter/task tid filtering Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 090/208] cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 091/208] mm/khugepaged: convert alloc_charge_hpage() to use folios Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 092/208] mm: convert collapse_huge_page() to use a folio Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 093/208] mm/khugepaged: use a folio more in collapse_file() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 094/208] khugepaged: inline hpage_collapse_alloc_folio() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 095/208] khugepaged: convert alloc_charge_hpage to alloc_charge_folio Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 096/208] khugepaged: remove hpage from collapse_file() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 097/208] mm: khugepaged: fix the arguments order in khugepaged_collapse_file trace point Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 098/208] iio: adc: ti-lmp92064: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 099/208] xhci: dbgtty: remove kfifo_out() wrapper Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 100/208] xhci: dbgtty: use kfifo from tty_port struct Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 101/208] xhci: dbc: honor usb transfer size boundaries Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 102/208] usb: gadget: f_uac2: Replace snprintf() with the safer scnprintf() variant Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 103/208] usb: gadget: f_uac2: fix non-newline-terminated function name Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 104/208] usb: gadget: f_uac2: fix return value for UAC2_ATTRIBUTE_STRING store Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 105/208] XHCI: Separate PORT and CAPs macros into dedicated file Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 106/208] usb: dwc3: core: Fix system suspend on TI AM62 platforms Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 107/208] tracing/fprobe-event: cleanup: Fix a wrong comment in fprobe event Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 108/208] tracing/probes: cleanup: Set trace_probe::nr_args at trace_probe_init Greg Kroah-Hartman
2024-10-28  6:24 ` Greg Kroah-Hartman [this message]
2024-10-28  6:24 ` [PATCH 6.6 110/208] uprobes: encapsulate preparation of uprobe args buffer Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 111/208] uprobes: prepare uprobe args buffer lazily Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 112/208] uprobes: prevent mutex_lock() under rcu_read_lock() Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 113/208] uprobe: avoid out-of-bounds memory access of fetching args Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 114/208] exec: dont WARN for racy path_noexec check Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 115/208] drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 116/208] ASoC: amd: yc: Add quirk for HP Dragonfly pro one Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 117/208] ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 118/208] ASoC: fsl_sai: Enable FIFO continue on error FCONT bit Greg Kroah-Hartman
2024-10-28  6:24 ` [PATCH 6.6 119/208] arm64: Force position-independent veneers Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 120/208] udf: refactor udf_current_aext() to handle error Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 121/208] udf: refactor udf_next_aext() " Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 122/208] udf: refactor inode_bmap() " Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 123/208] udf: fix uninit-value use in udf_get_fileshortad Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 124/208] ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 125/208] cifs: Validate content of NFS reparse point buffer Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 126/208] platform/x86: dell-sysman: add support for alienware products Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 127/208] LoongArch: Dont crash in stack_top() for tasks without vDSO Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 128/208] jfs: Fix sanity check in dbMount Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 129/208] tracing/probes: Fix MAX_TRACE_ARGS limit handling Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 130/208] tracing: Consider the NULL character when validating the event length Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 131/208] xfrm: extract dst lookup parameters into a struct Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 132/208] xfrm: respect ip protocols rules criteria when performing dst lookups Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 133/208] xfrm: Add Direction to the SA in or out Greg Kroah-Hartman
2024-10-28 11:08   ` Antony Antony
2024-10-28 12:42     ` Sasha Levin
2024-10-29 10:18       ` Antony Antony
2024-10-29 16:38         ` Sasha Levin
2024-10-28  6:25 ` [PATCH 6.6 134/208] xfrm: validate new SAs prefixlen using SA family when sel.family is unset Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 135/208] netfilter: bpf: must hold reference on net namespace Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 136/208] net/sun3_82586: fix potential memory leak in sun3_82586_send_packet() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 137/208] be2net: fix potential memory leak in be_xmit() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 138/208] net: plip: fix break; causing plip to never transmit Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 139/208] octeon_ep: Implement helper for iterating packets in Rx queue Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 140/208] octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 141/208] net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 142/208] fsl/fman: Save device references taken in mac_probe() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 143/208] fsl/fman: Fix refcount handling of fman-related devices Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 144/208] netfilter: xtables: fix typo causing some targets not to load on IPv6 Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 145/208] net: wwan: fix global oob in wwan_rtnl_policy Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 146/208] net/sched: adjust device watchdog timer to detect stopped queue at right time Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 147/208] net: fix races in netdev_tx_sent_queue()/dev_watchdog() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 148/208] net: usb: usbnet: fix name regression Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 149/208] bpf: Simplify checking size of helper accesses Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 150/208] bpf: Add MEM_WRITE attribute Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 151/208] bpf: Fix overloading of MEM_UNINITs meaning Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 152/208] bpf: Remove MEM_UNINIT from skb/xdp MTU helpers Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 153/208] net/sched: act_api: deny mismatched skip_sw/skip_hw flags for actions created by classifiers Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 154/208] net: sched: fix use-after-free in taprio_change() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 155/208] net: sched: use RCU read-side critical section in taprio_dump() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 156/208] r8169: avoid unsolicited interrupts Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 157/208] posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 158/208] Bluetooth: SCO: Fix UAF on sco_sock_timeout Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 159/208] Bluetooth: ISO: Fix UAF on iso_sock_timeout Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 160/208] bpf,perf: Fix perf_event_detach_bpf_prog error handling Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 161/208] net: dsa: mv88e6xxx: group cycle counter coefficients Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 162/208] net: dsa: mv88e6xxx: read cycle counter period from hardware Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 163/208] net: dsa: mv88e6xxx: support 4000ps cycle counter period Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 164/208] ASoC: dt-bindings: davinci-mcasp: Fix interrupts property Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 165/208] ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 166/208] ASoC: loongson: Fix component check failed on FDT systems Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 167/208] ASoC: max98388: Fix missing increment of variable slot_found Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 168/208] ASoC: rsnd: Fix probe failure on HiHope boards due to endpoint parsing Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 169/208] ASoC: fsl_micfil: Add a flag to distinguish with different volume control types Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 170/208] ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 171/208] powercap: dtpm_devfreq: Fix error check against dev_pm_qos_add_request() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 172/208] nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 173/208] ALSA: hda/realtek: Update default depop procedure Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 174/208] smb: client: Handle kstrdup failures for passwords Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 175/208] cpufreq/cppc: Move and rename cppc_cpufreq_{perf_to_khz|khz_to_perf}() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 176/208] cpufreq: CPPC: fix perf_to_khz/khz_to_perf conversion exception Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 177/208] btrfs: fix passing 0 to ERR_PTR in btrfs_search_dir_index_item() Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 178/208] btrfs: zoned: fix zone unusable accounting for freed reserved extent Greg Kroah-Hartman
2024-10-28  6:25 ` [PATCH 6.6 179/208] drm/amd: Guard against bad data for ATIF ACPI method Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 180/208] ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[] Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 181/208] ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 182/208] ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 183/208] nilfs2: fix kernel bug due to missing clearing of buffer delay flag Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 184/208] openat2: explicitly return -E2BIG for (usize > PAGE_SIZE) Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 185/208] KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 186/208] KVM: arm64: Fix shift-out-of-bounds bug Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 187/208] KVM: arm64: Dont eagerly teardown the vgic on init error Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 188/208] x86/lam: Disable ADDRESS_MASKING in most cases Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 189/208] ALSA: hda/tas2781: select CRC32 instead of CRC32_SARWATE Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 190/208] ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593 Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 191/208] LoongArch: Get correct cores_per_package for SMT systems Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 192/208] LoongArch: Enable IRQ if do_ale() triggered in irq-enabled context Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 193/208] LoongArch: Make KASAN usable for variable cpu_vabits Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 194/208] xfrm: fix one more kernel-infoleak in algo dumping Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 195/208] hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 196/208] drm/amd/display: Disable PSR-SU on Parade 08-01 TCON too Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 197/208] selinux: improve error checking in sel_write_load() Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 198/208] net: phy: dp83822: Fix reset pin definitions Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 199/208] block: fix sanity checks in blk_rq_map_user_bvec Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 200/208] ata: libata: Set DID_TIME_OUT for commands that actually timed out Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 201/208] ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe() Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 202/208] platform/x86: dell-wmi: Ignore suspend notifications Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 203/208] ACPI: PRM: Clean up guid type in struct prm_handler_info Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 204/208] RDMA/bnxt_re: Fix the offset for GenP7 adapters for user applications Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 205/208] RDMA/bnxt_re: Avoid creating fence MR for newer adapters Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 206/208] RDMA/bnxt_re: Fix unconditional fence " Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 207/208] tracing: probes: Fix to zero initialize a local variable Greg Kroah-Hartman
2024-10-28  6:26 ` [PATCH 6.6 208/208] task_work: make TWA_NMI_CURRENT handling conditional on IRQ_WORK Greg Kroah-Hartman
2024-10-28  8:06 ` [PATCH 6.6 000/208] 6.6.59-rc1 review Miguel Ojeda
2024-10-28 12:48 ` Takeshi Ogasawara
2024-10-28 14:18 ` Mark Brown
2024-10-28 15:58 ` Naresh Kamboju
2024-10-28 17:51 ` SeongJae Park
2024-10-28 19:20 ` Peter Schneider
2024-10-28 19:51 ` Florian Fainelli
2024-10-29  2:02 ` [PATCH 6.6] " Hardik Garg
2024-10-29  5:05 ` [PATCH 6.6 000/208] " Harshit Mogalapalli
2024-10-29 12:45 ` Muhammad Usama Anjum
2024-10-30  1:31 ` Ron Economos

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=20241028062309.343413956@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=mhiramat@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /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