Re: [PATCH bpf-next v3 08/10] tools/libbpf: Add support for BPF_PROG_TYPE_LSM
From: KP Singh <hidden>
Date: 2020-01-24 14:16:13
Also in:
bpf, lkml
On Thu, Jan 23, 2020 at 7:25 AM KP Singh [off-list ref] wrote:quoted
From: KP Singh <redacted> * Add functionality in libbpf to attach eBPF program to LSM hooks * Lookup the index of the LSM hook in security_hook_heads and pass it in attr->lsm_hook_idx Signed-off-by: KP Singh <redacted> Reviewed-by: Brendan Jackman <jackmanb@google.com> Reviewed-by: Florent Revest <redacted> Reviewed-by: Thomas Garnier <redacted> ---Looks good, but see few nits below. Acked-by: Andrii Nakryiko <redacted>
Thanks!
quoted
tools/lib/bpf/bpf.c | 6 ++- tools/lib/bpf/bpf.h | 1 + tools/lib/bpf/libbpf.c | 104 +++++++++++++++++++++++++++++++++++++-- tools/lib/bpf/libbpf.h | 4 ++ tools/lib/bpf/libbpf.map | 3 ++ 5 files changed, 114 insertions(+), 4 deletions(-)[...]quoted
@@ -5084,6 +5099,8 @@ __bpf_object__open(const char *path, const void *obj_buf, size_t obj_buf_sz, if (prog->type != BPF_PROG_TYPE_UNSPEC) continue; + +why these extra lines?
Ah this might have crept in my latest rebase. Will remove these.
quoted
err = libbpf_prog_type_by_name(prog->section_name, &prog_type, &attach_type); if (err == -ESRCH)@@ -6160,6 +6177,7 @@ bool bpf_program__is_##NAME(const struct bpf_program *prog) \ } \ BPF_PROG_TYPE_FNS(socket_filter, BPF_PROG_TYPE_SOCKET_FILTER); +BPF_PROG_TYPE_FNS(lsm, BPF_PROG_TYPE_LSM); BPF_PROG_TYPE_FNS(kprobe, BPF_PROG_TYPE_KPROBE); BPF_PROG_TYPE_FNS(sched_cls, BPF_PROG_TYPE_SCHED_CLS); BPF_PROG_TYPE_FNS(sched_act, BPF_PROG_TYPE_SCHED_ACT);@@ -6226,6 +6244,8 @@ static struct bpf_link *attach_raw_tp(const struct bpf_sec_def *sec, struct bpf_program *prog); static struct bpf_link *attach_trace(const struct bpf_sec_def *sec, struct bpf_program *prog); +static struct bpf_link *attach_lsm(const struct bpf_sec_def *sec, + struct bpf_program *prog); struct bpf_sec_def { const char *sec;@@ -6272,6 +6292,9 @@ static const struct bpf_sec_def section_defs[] = { SEC_DEF("freplace/", EXT, .is_attach_btf = true, .attach_fn = attach_trace), + SEC_DEF("lsm/", LSM, + .expected_attach_type = BPF_LSM_MAC,curious, will there be non-MAC LSM programs? if yes, how they are going to be different and which prefix will we use then?
One can think BPF_LSM_AUDIT programs which will only be used to log information from the LSM hooks and not enforce a policy. Currently, one can sort of do that by disabling CONFIG_SECURITY_BPF_ENFORCE but that's an all or none hammer.
quoted
+ .attach_fn = attach_lsm), BPF_PROG_SEC("xdp", BPF_PROG_TYPE_XDP), BPF_PROG_SEC("perf_event", BPF_PROG_TYPE_PERF_EVENT), BPF_PROG_SEC("lwt_in", BPF_PROG_TYPE_LWT_IN),@@ -6533,6 +6556,44 @@ static int bpf_object__collect_struct_ops_map_reloc(struct bpf_object *obj, return -EINVAL; } +static __s32 find_lsm_hook_idx(struct bpf_program *prog)nit: I'd stick to int for return result, we barely ever use __s32 in libbpf.c
Sure. Changed to int. - KP
[...]