All of lore.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 (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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.