From: Chiara Meiohas <[email protected]> The first test validates that the BPF verifier accepts a program that accesses the hook parameters (in_len) and returns values in the valid errno range.
The second test validates that the BPF verifier rejects a program that returns a positive value, which is outside the valid [-4095, 0] return range for BPF-LSM hooks. Signed-off-by: Chiara Meiohas <[email protected]> Reviewed-by: Maher Sanalla <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]> --- tools/testing/selftests/bpf/progs/verifier_lsm.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/verifier_lsm.c b/tools/testing/selftests/bpf/progs/verifier_lsm.c index 38e8e91768620..9b2487948f8cb 100644 --- a/tools/testing/selftests/bpf/progs/verifier_lsm.c +++ b/tools/testing/selftests/bpf/progs/verifier_lsm.c @@ -188,4 +188,27 @@ int BPF_PROG(null_check, struct file *file) return 0; } +SEC("lsm/fw_validate_cmd") +__description("lsm fw_validate_cmd: validate hook parameters") +__success +int BPF_PROG(fw_validate_cmd_test, const void *in, size_t in_len, + const struct device *dev, enum fw_cmd_class class_id, u32 id) +{ + if (!in_len) + return -22; + + return 0; +} + +SEC("lsm/fw_validate_cmd") +__description("lsm fw_validate_cmd: invalid positive return") +__failure __msg("R0 has smin=1 smax=1 should have been in [-4095, 0]") +__naked int fw_validate_cmd_fail(void *ctx) +{ + asm volatile ( + "r0 = 1;" + "exit;" + ::: __clobber_all); +} + char _license[] SEC("license") = "GPL"; -- 2.53.0

