Thread (41 messages) 41 messages, 7 authors, 2025-05-21

Re: [PATCH v3 0/4] Introducing Hornet LSM

From: Alexei Starovoitov <hidden>
Date: 2025-05-16 23:49:22
Also in: bpf, keyrings, linux-crypto, linux-doc, linux-kbuild, linux-kselftest, lkml, llvm

On Fri, May 16, 2025 at 12:49 PM Paul Moore [off-list ref] wrote:
On Wed, May 14, 2025 at 2:48 PM KP Singh [off-list ref] wrote:
quoted
On Wed, May 14, 2025 at 5:06 AM Paul Moore [off-list ref] wrote:
quoted
On Sat, May 10, 2025 at 10:01 PM KP Singh [off-list ref] wrote:
quoted
...
quoted
The signature check in the verifier (during BPF_PROG_LOAD):

    verify_pkcs7_signature(prog->aux->sha, sizeof(prog->aux->sha),
sig_from_bpf_attr, …);
I think we still need to clarify the authorization aspect of your
proposed design.

Working under the assumption that the core BPF kernel code doesn't
want to enforce any restrictions, or at least as few as possible ...
The assumption is not true, I should have clarified it in the original
design. With the UAPI / bpf_attr the bpf syscall is simply denied if
the signature does not verify, so we don't need any LSM logic for
this. There is really no point in continuing as signature verification
is a part of the API contract when the user passes the sig, keyring in
the bpf syscall.
I think we need some clarification on a few of these details, it would
be good if you could answer the questions below about the
authorization aspects of your design?

* Is the signature validation code in the BPF verifier *always* going
to be enforced when a signature is passed in from userspace?  In other
words, in your design is there going to be either a kernel build time
or runtime configuration knob that could selectively enable (or
disable) signature verification in the BPF verifier?
If there is a signature in union bpf_attr and it's incorrect
the prog_load command will be rejected.
No point in adding a knob to control that.
* In the case where the signature validation code in the BPF verifier
is active, what happens when a signature is *not* passed in from
userspace?  Will the BPF verifier allow the program load to take
place?  Will the load operation be blocked?  Will the load operation
be subject to a more granular policy, and if so, how do you plan to
incorporate that policy decision into the BPF program load path?
If there is no signature the existing loading semantics will remain intact.
We can discuss whether to add a sysctl or cgroup knob to disallow
loading when signature is not present, but it probably should be
a job of trivial LSM:
if (prog_attr doesn't have signature &&
   (task == .. || task is under certain cgroup || whatever))
  disallow.


Note that the prog verification itself is independent of the signature.
If prog fails to pass safety checks it will still be rejected
even if signature is ok.
We're not going to do a verifier bypass.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help