[bpf-next] libbpf: reject static entry-point BPF programs

Message ID 20210514195534.1440970-1-andrii@kernel.org
State New
Headers show
Series
  • [bpf-next] libbpf: reject static entry-point BPF programs
Related show

Commit Message

Andrii Nakryiko May 14, 2021, 7:55 p.m.
Detect use of static entry-point BPF programs (those with SEC() markings) and
emit error message. This is similar to
c1cccec9c636 ("libbpf: Reject static maps") but for BPF programs.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
---
 tools/lib/bpf/libbpf.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Andrii Nakryiko May 15, 2021, 5:25 a.m. | #1
On Fri, May 14, 2021 at 4:14 PM Alexei Starovoitov
<alexei.starovoitov@gmail.com> wrote:
>

> On Fri, May 14, 2021 at 1:34 PM Andrii Nakryiko <andrii@kernel.org> wrote:

> >

> > Detect use of static entry-point BPF programs (those with SEC() markings) and

> > emit error message.

>

> Applied. I was wondering whether you've seen such combinations ?


Haven't seen this anywhere in the real code, only tested locally by
adding static to one of selftests. Unlikely to break anyone, but good
to be as strict as with maps.

Patch

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 182bd3d3f728..e58f51b24574 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -677,6 +677,11 @@  bpf_object__add_programs(struct bpf_object *obj, Elf_Data *sec_data,
 			return -LIBBPF_ERRNO__FORMAT;
 		}
 
+		if (sec_idx != obj->efile.text_shndx && GELF_ST_BIND(sym.st_info) == STB_LOCAL) {
+			pr_warn("sec '%s': program '%s' is static and not supported\n", sec_name, name);
+			return -ENOTSUP;
+		}
+
 		pr_debug("sec '%s': found program '%s' at insn offset %zu (%zu bytes), code size %zu insns (%zu bytes)\n",
 			 sec_name, name, sec_off / BPF_INSN_SZ, sec_off, prog_sz / BPF_INSN_SZ, prog_sz);