bpf-for-netdev
-----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQTFp0I1jqZrAX+hPRXbK58LschIgwUCZkadRwAKCRDbK58LschI g7xHAP4qtAPmdwIkR5WIuqZtSEgk+a8ZZAvBvfEiGmjTH57x7QEAwvHBo0BkemuG E8VjTgG12h93iI0VwNFY4k9MgBmWQQA= =9BHu -----END PGP SIGNATURE----- Merge tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf Daniel Borkmann says: ==================== pull-request: bpf 2024-05-17 We've added 7 non-merge commits during the last 2 day(s) which contain a total of 8 files changed, 20 insertions(+), 9 deletions(-). The main changes are: 1) Fix KASAN slab-out-of-bounds in percpu_array_map_gen_lookup and add BPF selftests to cover this case, from Andrii Nakryiko. (Report https://lore.kernel.org/bpf/20240514231155.1004295-1-kuba@kernel.org/) 2) Fix two BPF selftests to adjust for kernel changes after fast-forwarding Linus' tree to make BPF CI all green again, from Martin KaFai Lau. 3) Fix libbpf feature detectors when using token_fd by adjusting the attribute size for memset to cover the former, also from Andrii Nakryiko. 4) Fix the description of 'src' in ALU instructions for the BPF ISA standardization doc, from Puranjay Mohan. * tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf: selftests/bpf: Adjust btf_dump test to reflect recent change in file_operations selftests/bpf: Adjust test_access_variable_array after a kernel function name change selftests/bpf: add more variations of map-in-map situations bpf: save extended inner map info for percpu array maps as well MAINTAINERS: Update ARM64 BPF JIT maintainer bpf, docs: Fix the description of 'src' in ALU instructions libbpf: fix feature detectors when using token_fd ==================== Link: https://lore.kernel.org/r/20240517001600.23703-1-daniel@iogearbox.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
52d94c180a
|
@ -301,8 +301,9 @@ Arithmetic instructions
|
|||
``ALU`` uses 32-bit wide operands while ``ALU64`` uses 64-bit wide operands for
|
||||
otherwise identical operations. ``ALU64`` instructions belong to the
|
||||
base64 conformance group unless noted otherwise.
|
||||
The 'code' field encodes the operation as below, where 'src' and 'dst' refer
|
||||
to the values of the source and destination registers, respectively.
|
||||
The 'code' field encodes the operation as below, where 'src' refers to the
|
||||
the source operand and 'dst' refers to the value of the destination
|
||||
register.
|
||||
|
||||
===== ===== ======= ==========================================================
|
||||
name code offset description
|
||||
|
|
|
@ -3777,7 +3777,7 @@ F: arch/arm/net/
|
|||
BPF JIT for ARM64
|
||||
M: Daniel Borkmann <daniel@iogearbox.net>
|
||||
M: Alexei Starovoitov <ast@kernel.org>
|
||||
M: Zi Shen Lim <zlim.lnx@gmail.com>
|
||||
M: Puranjay Mohan <puranjay@kernel.org>
|
||||
L: bpf@vger.kernel.org
|
||||
S: Supported
|
||||
F: arch/arm64/net/
|
||||
|
|
|
@ -32,7 +32,7 @@ struct bpf_map *bpf_map_meta_alloc(int inner_map_ufd)
|
|||
|
||||
inner_map_meta_size = sizeof(*inner_map_meta);
|
||||
/* In some cases verifier needs to access beyond just base map. */
|
||||
if (inner_map->ops == &array_map_ops)
|
||||
if (inner_map->ops == &array_map_ops || inner_map->ops == &percpu_array_map_ops)
|
||||
inner_map_meta_size = sizeof(struct bpf_array);
|
||||
|
||||
inner_map_meta = kzalloc(inner_map_meta_size, GFP_USER);
|
||||
|
@ -68,7 +68,7 @@ struct bpf_map *bpf_map_meta_alloc(int inner_map_ufd)
|
|||
|
||||
/* Misc members not needed in bpf_map_meta_equal() check. */
|
||||
inner_map_meta->ops = inner_map->ops;
|
||||
if (inner_map->ops == &array_map_ops) {
|
||||
if (inner_map->ops == &array_map_ops || inner_map->ops == &percpu_array_map_ops) {
|
||||
struct bpf_array *inner_array_meta =
|
||||
container_of(inner_map_meta, struct bpf_array, map);
|
||||
struct bpf_array *inner_array = container_of(inner_map, struct bpf_array, map);
|
||||
|
|
|
@ -105,7 +105,7 @@ int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size, int attempts)
|
|||
*/
|
||||
int probe_memcg_account(int token_fd)
|
||||
{
|
||||
const size_t attr_sz = offsetofend(union bpf_attr, attach_btf_obj_fd);
|
||||
const size_t attr_sz = offsetofend(union bpf_attr, prog_token_fd);
|
||||
struct bpf_insn insns[] = {
|
||||
BPF_EMIT_CALL(BPF_FUNC_ktime_get_coarse_ns),
|
||||
BPF_EXIT_INSN(),
|
||||
|
|
|
@ -22,7 +22,7 @@ int probe_fd(int fd)
|
|||
|
||||
static int probe_kern_prog_name(int token_fd)
|
||||
{
|
||||
const size_t attr_sz = offsetofend(union bpf_attr, prog_name);
|
||||
const size_t attr_sz = offsetofend(union bpf_attr, prog_token_fd);
|
||||
struct bpf_insn insns[] = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
|
|
|
@ -653,7 +653,7 @@ static void test_btf_dump_struct_data(struct btf *btf, struct btf_dump *d,
|
|||
cmpstr =
|
||||
"(struct file_operations){\n"
|
||||
" .owner = (struct module *)0xffffffffffffffff,\n"
|
||||
" .llseek = (loff_t (*)(struct file *, loff_t, int))0xffffffffffffffff,";
|
||||
" .fop_flags = (fop_flags_t)4294967295,";
|
||||
|
||||
ASSERT_STRNEQ(str, cmpstr, strlen(cmpstr), "file_operations");
|
||||
}
|
||||
|
|
|
@ -110,10 +110,14 @@ DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, array_map, array_of_array_maps);
|
|||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, hash_map, array_of_hash_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, hash_malloc_map, array_of_hash_malloc_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, lru_hash_map, array_of_lru_hash_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, pcpu_array_map, array_of_pcpu_array_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_ARRAY_OF_MAPS, pcpu_hash_map, array_of_pcpu_hash_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, array_map, hash_of_array_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, hash_map, hash_of_hash_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, hash_malloc_map, hash_of_hash_malloc_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, lru_hash_map, hash_of_lru_hash_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, pcpu_array_map, hash_of_pcpu_array_maps);
|
||||
DEFINE_MAP_OF_MAP(BPF_MAP_TYPE_HASH_OF_MAPS, pcpu_hash_map, hash_of_pcpu_hash_maps);
|
||||
|
||||
#define WRITE_ONCE(x, val) ((*(volatile typeof(x) *) &(x)) = (val))
|
||||
|
||||
|
@ -204,6 +208,8 @@ int test_map_kptr(struct __sk_buff *ctx)
|
|||
TEST(hash_map);
|
||||
TEST(hash_malloc_map);
|
||||
TEST(lru_hash_map);
|
||||
TEST(pcpu_array_map);
|
||||
TEST(pcpu_hash_map);
|
||||
|
||||
#undef TEST
|
||||
return 0;
|
||||
|
@ -281,10 +287,14 @@ int test_map_in_map_kptr(struct __sk_buff *ctx)
|
|||
TEST(array_of_hash_maps);
|
||||
TEST(array_of_hash_malloc_maps);
|
||||
TEST(array_of_lru_hash_maps);
|
||||
TEST(array_of_pcpu_array_maps);
|
||||
TEST(array_of_pcpu_hash_maps);
|
||||
TEST(hash_of_array_maps);
|
||||
TEST(hash_of_hash_maps);
|
||||
TEST(hash_of_hash_malloc_maps);
|
||||
TEST(hash_of_lru_hash_maps);
|
||||
TEST(hash_of_pcpu_array_maps);
|
||||
TEST(hash_of_pcpu_hash_maps);
|
||||
|
||||
#undef TEST
|
||||
return 0;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
unsigned long span = 0;
|
||||
|
||||
SEC("fentry/load_balance")
|
||||
SEC("fentry/sched_balance_rq")
|
||||
int BPF_PROG(fentry_fentry, int this_cpu, struct rq *this_rq,
|
||||
struct sched_domain *sd)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue