linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [bpf-next v2 1/2] bpf/helpers: bpf_strnstr: Exact match length
       [not found] <cover.1756348926.git.rongtao@cestc.cn>
@ 2025-08-28  2:53 ` Rong Tao
  2025-08-28  2:53 ` [bpf-next v2 2/2] selftests/bpf: Add tests for bpf_strnstr Rong Tao
  1 sibling, 0 replies; 2+ messages in thread
From: Rong Tao @ 2025-08-28  2:53 UTC (permalink / raw)
  To: andrii.nakryiko, ast, daniel
  Cc: rtoax, Rong Tao, Andrii Nakryiko, Martin KaFai Lau,
	Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
	Shuah Khan, Viktor Malik,
	open list:BPF [GENERAL] (Safe Dynamic Programs and Tools),
	open list, open list:KERNEL SELFTEST FRAMEWORK

From: Rong Tao <rongtao@cestc.cn>

strnstr should not treat the ending '\0' of s2 as a matching character,
otherwise the parameter 'len' will be meaningless, for example:

    1. bpf_strnstr("openat", "open", 4) = -ENOENT
    2. bpf_strnstr("openat", "open", 5) = 0

This patch makes (1) return 0, indicating a successful match.

Signed-off-by: Rong Tao <rongtao@cestc.cn>
---
 kernel/bpf/helpers.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 401b4932cc49..ced7132980fe 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -3672,10 +3672,12 @@ __bpf_kfunc int bpf_strnstr(const char *s1__ign, const char *s2__ign, size_t len
 
 	guard(pagefault)();
 	for (i = 0; i < XATTR_SIZE_MAX; i++) {
-		for (j = 0; i + j < len && j < XATTR_SIZE_MAX; j++) {
+		for (j = 0; i + j <= len && j < XATTR_SIZE_MAX; j++) {
 			__get_kernel_nofault(&c2, s2__ign + j, char, err_out);
 			if (c2 == '\0')
 				return i;
+			if (i + j == len)
+				break;
 			__get_kernel_nofault(&c1, s1__ign + j, char, err_out);
 			if (c1 == '\0')
 				return -ENOENT;
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [bpf-next v2 2/2] selftests/bpf: Add tests for bpf_strnstr
       [not found] <cover.1756348926.git.rongtao@cestc.cn>
  2025-08-28  2:53 ` [bpf-next v2 1/2] bpf/helpers: bpf_strnstr: Exact match length Rong Tao
@ 2025-08-28  2:53 ` Rong Tao
  1 sibling, 0 replies; 2+ messages in thread
From: Rong Tao @ 2025-08-28  2:53 UTC (permalink / raw)
  To: andrii.nakryiko, ast, daniel
  Cc: rtoax, Rong Tao, Andrii Nakryiko, Martin KaFai Lau,
	Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
	Shuah Khan, Viktor Malik,
	open list:BPF [GENERAL] (Safe Dynamic Programs and Tools),
	open list, open list:KERNEL SELFTEST FRAMEWORK

From: Rong Tao <rongtao@cestc.cn>

Add two tests for bpf_strnstr():

    bpf_strnstr("", "", 0) = 0
    bpf_strnstr("hello world", "hello", 5) = 0

Signed-off-by: Rong Tao <rongtao@cestc.cn>
---
 tools/testing/selftests/bpf/progs/string_kfuncs_success.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/selftests/bpf/progs/string_kfuncs_success.c b/tools/testing/selftests/bpf/progs/string_kfuncs_success.c
index 46697f381878..f8fe14787b2e 100644
--- a/tools/testing/selftests/bpf/progs/string_kfuncs_success.c
+++ b/tools/testing/selftests/bpf/progs/string_kfuncs_success.c
@@ -30,6 +30,8 @@ __test(2) int test_strcspn(void *ctx) { return bpf_strcspn(str, "lo"); }
 __test(6) int test_strstr_found(void *ctx) { return bpf_strstr(str, "world"); }
 __test(-ENOENT) int test_strstr_notfound(void *ctx) { return bpf_strstr(str, "hi"); }
 __test(0) int test_strstr_empty(void *ctx) { return bpf_strstr(str, ""); }
+__test(0) int test_strnstr_found(void *ctx) { return bpf_strnstr("", "", 0); }
+__test(0) int test_strnstr_found(void *ctx) { return bpf_strnstr(str, "hello", 5); }
 __test(0) int test_strnstr_found(void *ctx) { return bpf_strnstr(str, "hello", 6); }
 __test(-ENOENT) int test_strnstr_notfound(void *ctx) { return bpf_strnstr(str, "hi", 10); }
 __test(0) int test_strnstr_empty(void *ctx) { return bpf_strnstr(str, "", 1); }
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-08-28  2:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1756348926.git.rongtao@cestc.cn>
2025-08-28  2:53 ` [bpf-next v2 1/2] bpf/helpers: bpf_strnstr: Exact match length Rong Tao
2025-08-28  2:53 ` [bpf-next v2 2/2] selftests/bpf: Add tests for bpf_strnstr Rong Tao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).