This is a note to let you know that I've just added the patch titled bpf: Merge printk and seq_printf VARARG max macros to the 5.15-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: bpf-merge-printk-and-seq_printf-vararg-max-macros.patch and it can be found in the queue-5.15 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From stable+bounces-20399-greg=kroah.com@xxxxxxxxxxxxxxx Sat Feb 17 13:13:52 2024 From: Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxx> Date: Sat, 17 Feb 2024 09:13:18 -0300 Subject: bpf: Merge printk and seq_printf VARARG max macros To: stable@xxxxxxxxxxxxxxx Cc: cascardo@xxxxxxxxxx, jolsa@xxxxxxxxxx, daniel@xxxxxxxxxxxxx, yhs@xxxxxx Message-ID: <20240217121321.2045993-5-cascardo@xxxxxxxxxx> From: Dave Marchevsky <davemarchevsky@xxxxxx> commit 335ff4990cf3bfa42d8846f9b3d8c09456f51801 upstream. MAX_SNPRINTF_VARARGS and MAX_SEQ_PRINTF_VARARGS are used by bpf helpers bpf_snprintf and bpf_seq_printf to limit their varargs. Both call into bpf_bprintf_prepare for print formatting logic and have convenience macros in libbpf (BPF_SNPRINTF, BPF_SEQ_PRINTF) which use the same helper macros to convert varargs to a byte array. Changing shared functionality to support more varargs for either bpf helper would affect the other as well, so let's combine the _VARARGS macros to make this more obvious. Signed-off-by: Dave Marchevsky <davemarchevsky@xxxxxx> Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> Link: https://lore.kernel.org/bpf/20210917182911.2426606-2-davemarchevsky@xxxxxx Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- include/linux/bpf.h | 2 ++ kernel/bpf/helpers.c | 4 +--- kernel/trace/bpf_trace.c | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -2290,6 +2290,8 @@ void bpf_arch_poke_desc_update(struct bp struct btf_id_set; bool btf_id_set_contains(const struct btf_id_set *set, u32 id); +#define MAX_BPRINTF_VARARGS 12 + int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args, u32 **bin_buf, u32 num_args); void bpf_bprintf_cleanup(void); --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -979,15 +979,13 @@ out: return err; } -#define MAX_SNPRINTF_VARARGS 12 - BPF_CALL_5(bpf_snprintf, char *, str, u32, str_size, char *, fmt, const void *, data, u32, data_len) { int err, num_args; u32 *bin_args; - if (data_len % 8 || data_len > MAX_SNPRINTF_VARARGS * 8 || + if (data_len % 8 || data_len > MAX_BPRINTF_VARARGS * 8 || (data_len && !data)) return -EINVAL; num_args = data_len / 8; --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -414,15 +414,13 @@ const struct bpf_func_proto *bpf_get_tra return &bpf_trace_printk_proto; } -#define MAX_SEQ_PRINTF_VARARGS 12 - BPF_CALL_5(bpf_seq_printf, struct seq_file *, m, char *, fmt, u32, fmt_size, const void *, data, u32, data_len) { int err, num_args; u32 *bin_args; - if (data_len & 7 || data_len > MAX_SEQ_PRINTF_VARARGS * 8 || + if (data_len & 7 || data_len > MAX_BPRINTF_VARARGS * 8 || (data_len && !data)) return -EINVAL; num_args = data_len / 8; Patches currently in stable-queue which might be from kroah.com@xxxxxxxxxxxxxxx are queue-5.15/bpf-add-struct-for-bin_args-arg-in-bpf_bprintf_prepare.patch queue-5.15/bpf-do-cleanup-in-bpf_bprintf_cleanup-only-when-needed.patch queue-5.15/bpf-merge-printk-and-seq_printf-vararg-max-macros.patch queue-5.15/smb-client-fix-potential-oobs-in-smb2_parse_contexts.patch queue-5.15/bpf-remove-trace_printk_lock.patch queue-5.15/smb-client-fix-parsing-of-smb3.1.1-posix-create-context.patch queue-5.15/smb-client-fix-oob-in-receive_encrypted_standard.patch