Commit Graph

3 Commits

Author SHA1 Message Date
Jerome Marchand 4c24993512 selftests/bpf: extract utility function for BPF disassembly
JIRA: https://issues.redhat.com/browse/RHEL-63880

Conflicts:
Context change due to missing commit 51f1892b5289 ("selftests/bpf: Add
netlink helper library") that rearrange the list of
TRUNNER_EXTRA_SOURCES files in the Makefile. I change the list so that
it conforms to upstream format.

commit 424ebaa3678b0d7f653dffb08eae90424740e0f4
Author: Eduard Zingerman <eddyz87@gmail.com>
Date:   Mon Jul 22 16:38:38 2024 -0700

    selftests/bpf: extract utility function for BPF disassembly

    struct bpf_insn *disasm_insn(struct bpf_insn *insn, char *buf, size_t buf_sz);

      Disassembles instruction 'insn' to a text buffer 'buf'.
      Removes insn->code hex prefix added by kernel disassembly routine.
      Returns a pointer to the next instruction
      (increments insn by either 1 or 2).

    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20240722233844.1406874-5-eddyz87@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2025-01-13 17:36:34 +01:00
Jerome Marchand 245de41b94 selftests/bpf: Factor out get_xlated_program() helper
JIRA: https://issues.redhat.com/browse/RHEL-23649

commit b4b7a4099b8ccea224577003fcf9d321bf0817b7
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Jan 5 18:48:18 2024 +0800

    selftests/bpf: Factor out get_xlated_program() helper

    Both test_verifier and test_progs use get_xlated_program(), so moving
    the helper into testing_helpers.h to reuse it.

    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20240105104819.3916743-3-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2024-10-15 10:48:58 +02:00
Artem Savkov bcb8067697 selftests/bpf: Disassembler tests for verifier.c:convert_ctx_access()
Bugzilla: https://bugzilla.redhat.com/2221599

commit 71cf4d027ad53a1e2847191ac14e50132d35a6a7
Author: Eduard Zingerman <eddyz87@gmail.com>
Date:   Sat Mar 4 03:12:47 2023 +0200

    selftests/bpf: Disassembler tests for verifier.c:convert_ctx_access()
    
    Function verifier.c:convert_ctx_access() applies some rewrites to BPF
    instructions that read or write BPF program context. This commit adds
    machinery to allow test cases that inspect BPF program after these
    rewrites are applied.
    
    An example of a test case:
    
      {
            // Shorthand for field offset and size specification
    	N(CGROUP_SOCKOPT, struct bpf_sockopt, retval),
    
            // Pattern generated for field read
    	.read  = "$dst = *(u64 *)($ctx + bpf_sockopt_kern::current_task);"
    		 "$dst = *(u64 *)($dst + task_struct::bpf_ctx);"
    		 "$dst = *(u32 *)($dst + bpf_cg_run_ctx::retval);",
    
            // Pattern generated for field write
    	.write = "*(u64 *)($ctx + bpf_sockopt_kern::tmp_reg) = r9;"
    		 "r9 = *(u64 *)($ctx + bpf_sockopt_kern::current_task);"
    		 "r9 = *(u64 *)(r9 + task_struct::bpf_ctx);"
    		 "*(u32 *)(r9 + bpf_cg_run_ctx::retval) = $src;"
    		 "r9 = *(u64 *)($ctx + bpf_sockopt_kern::tmp_reg);" ,
      },
    
    For each test case, up to three programs are created:
    - One that uses BPF_LDX_MEM to read the context field.
    - One that uses BPF_STX_MEM to write to the context field.
    - One that uses BPF_ST_MEM to write to the context field.
    
    The disassembly of each program is compared with the pattern specified
    in the test case.
    
    Kernel code for disassembly is reused (as is in the bpftool).
    To keep Makefile changes to the minimum, symbolic links to
    `kernel/bpf/disasm.c` and `kernel/bpf/disasm.h ` are added.
    
    Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20230304011247.566040-4-eddyz87@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-09-22 09:12:11 +02:00