mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 23:23:03 +00:00
selftests/bpf: Add a test case to write strtol result into .rodata
Add a test case which attempts to write into .rodata section of the BPF program, and for comparison this adds test cases also for .bss and .data section. Before fix: # ./vmtest.sh -- ./test_progs -t verifier_const [...] ./test_progs -t verifier_const tester_init:PASS:tester_log_buf 0 nsec process_subtest:PASS:obj_open_mem 0 nsec process_subtest:PASS:specs_alloc 0 nsec run_subtest:PASS:obj_open_mem 0 nsec run_subtest:FAIL:unexpected_load_success unexpected success: 0 #465/1 verifier_const/rodata: write rejected:FAIL #465/2 verifier_const/bss: write accepted:OK #465/3 verifier_const/data: write accepted:OK #465 verifier_const:FAIL [...] After fix: # ./vmtest.sh -- ./test_progs -t verifier_const [...] ./test_progs -t verifier_const #465/1 verifier_const/rodata: write rejected:OK #465/2 verifier_const/bss: write accepted:OK #465/3 verifier_const/data: write accepted:OK #465 verifier_const:OK [...] Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com> Acked-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20240913191754.13290-8-daniel@iogearbox.net Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
b073b82d4d
commit
2e3f066020
@ -21,6 +21,7 @@
|
||||
#include "verifier_cgroup_inv_retcode.skel.h"
|
||||
#include "verifier_cgroup_skb.skel.h"
|
||||
#include "verifier_cgroup_storage.skel.h"
|
||||
#include "verifier_const.skel.h"
|
||||
#include "verifier_const_or.skel.h"
|
||||
#include "verifier_ctx.skel.h"
|
||||
#include "verifier_ctx_sk_msg.skel.h"
|
||||
@ -146,6 +147,7 @@ void test_verifier_cfg(void) { RUN(verifier_cfg); }
|
||||
void test_verifier_cgroup_inv_retcode(void) { RUN(verifier_cgroup_inv_retcode); }
|
||||
void test_verifier_cgroup_skb(void) { RUN(verifier_cgroup_skb); }
|
||||
void test_verifier_cgroup_storage(void) { RUN(verifier_cgroup_storage); }
|
||||
void test_verifier_const(void) { RUN(verifier_const); }
|
||||
void test_verifier_const_or(void) { RUN(verifier_const_or); }
|
||||
void test_verifier_ctx(void) { RUN(verifier_ctx); }
|
||||
void test_verifier_ctx_sk_msg(void) { RUN(verifier_ctx_sk_msg); }
|
||||
|
42
tools/testing/selftests/bpf/progs/verifier_const.c
Normal file
42
tools/testing/selftests/bpf/progs/verifier_const.c
Normal file
@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2024 Isovalent */
|
||||
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include "bpf_misc.h"
|
||||
|
||||
const volatile long foo = 42;
|
||||
long bar;
|
||||
long bart = 96;
|
||||
|
||||
SEC("tc/ingress")
|
||||
__description("rodata: write rejected")
|
||||
__failure __msg("write into map forbidden")
|
||||
int tcx1(struct __sk_buff *skb)
|
||||
{
|
||||
char buff[] = { '8', '4', '\0' };
|
||||
bpf_strtol(buff, sizeof(buff), 0, (long *)&foo);
|
||||
return TCX_PASS;
|
||||
}
|
||||
|
||||
SEC("tc/ingress")
|
||||
__description("bss: write accepted")
|
||||
__success
|
||||
int tcx2(struct __sk_buff *skb)
|
||||
{
|
||||
char buff[] = { '8', '4', '\0' };
|
||||
bpf_strtol(buff, sizeof(buff), 0, &bar);
|
||||
return TCX_PASS;
|
||||
}
|
||||
|
||||
SEC("tc/ingress")
|
||||
__description("data: write accepted")
|
||||
__success
|
||||
int tcx3(struct __sk_buff *skb)
|
||||
{
|
||||
char buff[] = { '8', '4', '\0' };
|
||||
bpf_strtol(buff, sizeof(buff), 0, &bart);
|
||||
return TCX_PASS;
|
||||
}
|
||||
|
||||
char LICENSE[] SEC("license") = "GPL";
|
Loading…
Reference in New Issue
Block a user