From: Jiri Olsa <olsajiri@gmail.com>
To: KP Singh <kpsingh@kernel.org>
Cc: Jiri Olsa <olsajiri@gmail.com>,
linux-security-module@vger.kernel.org, bpf@vger.kernel.org,
paul@paul-moore.com, keescook@chromium.org,
casey@schaufler-ca.com, song@kernel.org, daniel@iogearbox.net,
ast@kernel.org, renauld@google.com
Subject: Re: [PATCH v5 4/5] bpf: Only enable BPF LSM hooks when an LSM program is attached
Date: Fri, 6 Oct 2023 11:05:19 +0200 [thread overview]
Message-ID: <ZR/Nz+aPH4sIQMwT@krava> (raw)
In-Reply-To: <ZR+2+gQ3B3tgFI/8@krava>
On Fri, Oct 06, 2023 at 09:27:57AM +0200, Jiri Olsa wrote:
SNIP
> > static int __bpf_trampoline_link_prog(struct bpf_tramp_link *link,
> > struct bpf_trampoline *tr)
> > {
> > enum bpf_tramp_prog_type kind;
> > struct bpf_tramp_link *link_exiting;
> > - int err = 0, num_lsm_progs = 0;
> > + int err = 0;
> > int cnt = 0, i;
> >
> > kind = bpf_attach_type_to_tramp(link->link.prog);
> > @@ -547,15 +566,14 @@ static int __bpf_trampoline_link_prog(struct
> > bpf_tramp_link *link, struct bpf_tr
> > /* prog already linked */
> > return -EBUSY;
> >
> > - if (link_exiting->link.prog->type == BPF_PROG_TYPE_LSM)
> > - num_lsm_progs++;
> > }
> >
> > - if (!num_lsm_progs && link->link.prog->type == BPF_PROG_TYPE_LSM)
> > - bpf_lsm_toggle_hook(tr->func.addr, true);
> > -
> > hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]);
> > tr->progs_cnt[kind]++;
> > +
> > + if (link->link.prog->type == BPF_PROG_TYPE_LSM)
> > + bpf_trampoline_toggle_lsm(tr, kind);
>
> how about keeping BPF_PROG_TYPE_LSM progs type count of attached programs
> in bpf_trampoline and toggle lsm on first coming in and last going out?
hm we actually allow other tracing program types to attach to bpf_lsm_*
functions, so I wonder we should toggle the lsm hook for each program
type (for bpf_lsm_* trampolines) because they'd expect the hook is called
but I'm not sure it's a valid use case to have like normal fentry program
attached to bpf_lsm_XXX function
jirka
>
> also the trampoline attach is actually made in bpf_trampoline_update,
> so I wonder it'd make more sense to put it in there, but it's already
> complicated, so it actually might be easier in here
>
> jirka
>
> > +
> > err = bpf_trampoline_update(tr, true /* lock_direct_mutex */);
> > if (err) {
> > hlist_del_init(&link->tramp_hlist);
> > @@ -578,7 +596,6 @@ static int __bpf_trampoline_unlink_prog(struct
> > bpf_tramp_link *link, struct bpf_
> > {
> > struct bpf_tramp_link *link_exiting;
> > enum bpf_tramp_prog_type kind;
> > - bool lsm_link_found = false;
> > int err, num_lsm_progs = 0;
> >
> > kind = bpf_attach_type_to_tramp(link->link.prog);
> > @@ -595,18 +612,14 @@ static int __bpf_trampoline_unlink_prog(struct
> > bpf_tramp_link *link, struct bpf_
> > tramp_hlist) {
> > if (link_exiting->link.prog->type == BPF_PROG_TYPE_LSM)
> > num_lsm_progs++;
> > -
> > - if (link_exiting->link.prog == link->link.prog)
> > - lsm_link_found = true;
> > }
> > }
> >
> > hlist_del_init(&link->tramp_hlist);
> > tr->progs_cnt[kind]--;
> >
> > - if (lsm_link_found && num_lsm_progs == 1)
> > - bpf_lsm_toggle_hook(tr->func.addr, false);
> > -
> > + if (link->link.prog->type == BPF_PROG_TYPE_LSM)
> > + bpf_trampoline_toggle_lsm(tr, kind);
> > return bpf_trampoline_update(tr, true /* lock_direct_mutex */);
> > }
> >
> >
> > - KP
next prev parent reply other threads:[~2023-10-06 9:05 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-28 20:24 [PATCH v5 0/5] Reduce overhead of LSMs with static calls KP Singh
2023-09-28 20:24 ` [PATCH v5 1/5] kernel: Add helper macros for loop unrolling KP Singh
2023-09-28 20:24 ` [PATCH v5 2/5] security: Count the LSMs enabled at compile time KP Singh
2023-09-29 0:37 ` Kees Cook
2023-09-28 20:24 ` [PATCH v5 3/5] security: Replace indirect LSM hook calls with static calls KP Singh
2023-09-30 16:13 ` kernel test robot
2023-09-30 20:40 ` Kees Cook
2023-10-04 0:09 ` KP Singh
2023-09-28 20:24 ` [PATCH v5 4/5] bpf: Only enable BPF LSM hooks when an LSM program is attached KP Singh
2023-10-05 8:09 ` Jiri Olsa
2023-10-05 13:26 ` KP Singh
2023-10-05 13:27 ` KP Singh
2023-10-05 13:52 ` Jiri Olsa
2023-10-05 16:07 ` KP Singh
2023-10-06 7:27 ` Jiri Olsa
2023-10-06 9:05 ` Jiri Olsa [this message]
2023-10-06 10:57 ` KP Singh
2023-10-06 18:32 ` KP Singh
2023-09-28 20:24 ` [PATCH v5 5/5] security: Add CONFIG_SECURITY_HOOK_LIKELY KP Singh
2023-09-29 0:38 ` Kees Cook
2023-09-29 0:41 ` [PATCH v5 0/5] Reduce overhead of LSMs with static calls Kees Cook
2023-10-02 11:06 ` Paolo Abeni
2023-10-02 11:09 ` KP Singh
2023-10-02 13:27 ` Paolo Abeni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZR/Nz+aPH4sIQMwT@krava \
--to=olsajiri@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=casey@schaufler-ca.com \
--cc=daniel@iogearbox.net \
--cc=keescook@chromium.org \
--cc=kpsingh@kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=renauld@google.com \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.