diff options
author | Alexei Starovoitov <ast@kernel.org> | 2025-09-11 09:34:37 -0700 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2025-09-11 09:34:37 -0700 |
commit | 5d87e96a4971760c83e554c1d3ca99986d4f9b47 (patch) | |
tree | 6623b8ed550fd713e09fd2466bfcafa2f3a6a393 /kernel/bpf/helpers.c | |
parent | f85981327a90c51e76f60e073cb6648b2f167226 (diff) | |
parent | e59a039119c3ec241228adf12dca0dd4398104d0 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf after rc5
Cross-merge BPF and other fixes after downstream PR.
No conflicts.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel/bpf/helpers.c')
-rw-r--r-- | kernel/bpf/helpers.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 1ef1e65bd7d0..c0c0764a2025 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -1271,8 +1271,11 @@ static int __bpf_async_init(struct bpf_async_kern *async, struct bpf_map *map, u goto out; } - /* allocate hrtimer via map_kmalloc to use memcg accounting */ - cb = bpf_map_kmalloc_node(map, size, GFP_ATOMIC, map->numa_node); + /* Allocate via bpf_map_kmalloc_node() for memcg accounting. Until + * kmalloc_nolock() is available, avoid locking issues by using + * __GFP_HIGH (GFP_ATOMIC & ~__GFP_RECLAIM). + */ + cb = bpf_map_kmalloc_node(map, size, __GFP_HIGH, map->numa_node); if (!cb) { ret = -ENOMEM; goto out; @@ -3699,10 +3702,17 @@ __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; + /* + * We allow reading an extra byte from s2 (note the + * `i + j <= len` above) to cover the case when s2 is + * a suffix of the first len chars of s1. + */ + if (i + j == len) + break; __get_kernel_nofault(&c1, s1__ign + j, char, err_out); if (c1 == '\0') return -ENOENT; |