kernel/bpf/helpers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
The strnchr() is not suitable for obtaining the end of a string with a length
exceeding 1 and ending with a NUL character.
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
---
kernel/bpf/helpers.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 449b9a5d3fe3..07490eba24fe 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -826,7 +826,7 @@ int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args,
u64 cur_arg;
char fmt_ptype, cur_ip[16], ip_spec[] = "%pXX";
- fmt_end = strnchr(fmt, fmt_size, 0);
+ fmt_end = strnchrnul(fmt, fmt_size, 0);
if (!fmt_end)
return -EINVAL;
fmt_size = fmt_end - fmt;
--
2.43.0
On 4/9/24 5:33 PM, Edward Adam Davis wrote: > The strnchr() is not suitable for obtaining the end of a string with a length > exceeding 1 and ending with a NUL character. Could you give more detailed explanation with specific examples? I think strnchr() does the right thing here. Note that if fmt is not NULL, strnchrnul() never returns NULL pointer so in the change below, 'if (!fmt_end)' will be always false. > > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > --- > kernel/bpf/helpers.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c > index 449b9a5d3fe3..07490eba24fe 100644 > --- a/kernel/bpf/helpers.c > +++ b/kernel/bpf/helpers.c > @@ -826,7 +826,7 @@ int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args, > u64 cur_arg; > char fmt_ptype, cur_ip[16], ip_spec[] = "%pXX"; > > - fmt_end = strnchr(fmt, fmt_size, 0); > + fmt_end = strnchrnul(fmt, fmt_size, 0); > if (!fmt_end) > return -EINVAL; > fmt_size = fmt_end - fmt;
> > The strnchr() is not suitable for obtaining the end of a string with a length > > exceeding 1 and ending with a NUL character. > > Could you give more detailed explanation with specific examples? I think > strnchr() does the right thing here. Note that if fmt is not NULL, > strnchrnul() never returns NULL pointer so in the change below, > 'if (!fmt_end)' will be always false. My mistake, strnchr() work well. > > >
© 2016 - 2026 Red Hat, Inc.