All of lore.kernel.org
 help / color / mirror / Atom feed
From: Blaise Boscaccy <bboscaccy@linux.microsoft.com>
To: KP Singh <kpsingh@kernel.org>
Cc: bpf@vger.kernel.org, linux-security-module@vger.kernel.org,
	paul@paul-moore.com, kys@microsoft.com, ast@kernel.org,
	daniel@iogearbox.net, andrii@kernel.org
Subject: Re: [PATCH 10/12] libbpf: Embed and verify the metadata hash in the loader
Date: Tue, 10 Jun 2025 11:15:59 -0700	[thread overview]
Message-ID: <87o6uvlaxs.fsf@microsoft.com> (raw)
In-Reply-To: <CACYkzJ6M7kA7Se4=AXWNVF1UyeHK3t+3Y_8Ap1L9pkUTbqys9Q@mail.gmail.com>

KP Singh <kpsingh@kernel.org> writes:

[...]

>>
>> The above code gets generated per-program and exists out-of-tree in a
>> very unreadable format in it's final form. I have general objections to
>> being forced to "trust" out-of-tree code, when it's demostrably trivial
>
> This is not out of tree. It's very much within the kernel tree.

No, it's not.

Running something like

bpftool gen skeleton -S -k <private_key> -i <identity_cert>
fentry_test.bpf.o

will yield a header file fentery_test.h or whatever. That header file
contains a customized and one-off version of the templated code in this
patch. That header file and the resultant loader it gets compiled into
exists out-of-tree.

>
>> to perform this check in-kernel, without impeding any of the other
>> stated use cases. There is no possible audit log nor LSM hook for these
>> operations. There is no way to know that this check was ever performed.
>>
>> Further, this check ends up happeing in an entirely different syscall,
>> the LSM layer and the end user may both see invalid programs successfully
>> being loaded into the kernel, that may fail mysteriously later.
>>
>> Also, this patch seems to rely on hacking into struct internals and
>> magic binary layouts.
>
> These magical binary layouts are BPF programs, as I mentioned, if you
> don't like this you (i.e an advanced user like Microsoft) can
> implement your own trusted loader in whatever format you like. We are
> not forcing you.
>
> If you really want to do it in the kernel, you can do it out of tree
> and maintain these patches (that's what "out of tree" actually means),
> this is not a direction the BPF maintainers are interested in as it
> does not meet the broader community's use-cases. We don’t want an
> unnecessary extension to the UAPI when some BPF programs do have
> stable instructions already (e.g. network) and some that can
> potentially have someday.
>

Yes, you are forcing us. Saying we are only allowed to use "trusted"
loaders, and that no one is allowed to have any in-kernel, in-tree code
that inspects user inputs or target programs directly is very
non-consentual on my end. This is a design mandate, being forced upon
other people, by you, with no concrete reasons, other than vague statements
around UAPI design, need or necessity.

-blaise

> RE The struct internals will be replaced by calling BPF_OBJ_GET_INFO
> directly from the loader program as I mentioned in the commit.”
>
>
> - KP
>
>
>>
>> -blaise
>>
>> >  void bpf_gen__record_attach_target(struct bpf_gen *gen, const char *attach_name,
>> >                                  enum bpf_attach_type type)
>> >  {
>> > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
>> > index b6ee9870523a..084372fa54f4 100644
>> > --- a/tools/lib/bpf/libbpf.h
>> > +++ b/tools/lib/bpf/libbpf.h
>> > @@ -1803,9 +1803,10 @@ struct gen_loader_opts {
>> >       const char *insns;
>> >       __u32 data_sz;
>> >       __u32 insns_sz;
>> > +     bool gen_hash;
>> >  };
>> >
>> > -#define gen_loader_opts__last_field insns_sz
>> > +#define gen_loader_opts__last_field gen_hash
>> >  LIBBPF_API int bpf_object__gen_loader(struct bpf_object *obj,
>> >                                     struct gen_loader_opts *opts);
>> >
>> > --
>> > 2.43.0

  reply	other threads:[~2025-06-10 18:16 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-06 23:29 [PATCH 00/12] Signed BPF programs KP Singh
2025-06-06 23:29 ` [PATCH 01/12] bpf: Implement an internal helper for SHA256 hashing KP Singh
2025-06-09  9:31   ` kernel test robot
2025-06-09 16:56   ` Alexei Starovoitov
2025-06-12 19:07   ` Eric Biggers
2025-06-16 23:40     ` KP Singh
2025-06-16 23:48       ` Eric Biggers
2025-06-17  0:04         ` KP Singh
2025-06-06 23:29 ` [PATCH 02/12] bpf: Update the bpf_prog_calc_tag to use SHA256 KP Singh
2025-06-09 17:46   ` Alexei Starovoitov
2025-06-06 23:29 ` [PATCH 03/12] bpf: Implement exclusive map creation KP Singh
2025-06-09 20:58   ` Alexei Starovoitov
2025-06-11 21:44     ` KP Singh
2025-06-11 22:55       ` Alexei Starovoitov
2025-06-11 23:05         ` KP Singh
2025-06-06 23:29 ` [PATCH 04/12] libbpf: Implement SHA256 internal helper KP Singh
2025-06-12 22:55   ` Andrii Nakryiko
2025-06-06 23:29 ` [PATCH 05/12] libbpf: Support exclusive map creation KP Singh
2025-06-07  9:16   ` kernel test robot
2025-06-12 22:55   ` Andrii Nakryiko
2025-06-12 23:41     ` KP Singh
2025-06-13 16:51       ` Andrii Nakryiko
2025-07-12  0:50         ` KP Singh
2025-07-12  0:53     ` KP Singh
2025-07-14 20:56       ` Andrii Nakryiko
2025-07-14 12:29     ` KP Singh
2025-07-14 12:55       ` KP Singh
2025-07-14 21:05         ` Andrii Nakryiko
2025-06-06 23:29 ` [PATCH 06/12] selftests/bpf: Add tests for exclusive maps KP Singh
2025-06-06 23:29 ` [PATCH 07/12] bpf: Return hashes of maps in BPF_OBJ_GET_INFO_BY_FD KP Singh
2025-06-07  9:26   ` kernel test robot
2025-06-08 13:11   ` kernel test robot
2025-06-09 21:30   ` Alexei Starovoitov
2025-06-11 14:27     ` KP Singh
2025-06-11 15:04       ` Alexei Starovoitov
2025-06-11 16:05         ` KP Singh
2025-06-06 23:29 ` [PATCH 08/12] bpf: Implement signature verification for BPF programs KP Singh
2025-06-09 21:39   ` Alexei Starovoitov
2025-06-10 16:37   ` Blaise Boscaccy
2025-06-06 23:29 ` [PATCH 09/12] libbpf: Update light skeleton for signing KP Singh
2025-06-09 21:41   ` Alexei Starovoitov
2025-06-06 23:29 ` [PATCH 10/12] libbpf: Embed and verify the metadata hash in the loader KP Singh
2025-06-10  0:08   ` Alexei Starovoitov
2025-06-10 16:51   ` Blaise Boscaccy
2025-06-10 17:43     ` KP Singh
2025-06-10 18:15       ` Blaise Boscaccy [this message]
2025-06-10 19:47         ` KP Singh
2025-06-10 21:24           ` James Bottomley
2025-06-10 22:31             ` Paul Moore
2025-06-10 22:35             ` KP Singh
2025-06-11 11:59               ` James Bottomley
2025-06-11 12:33                 ` KP Singh
2025-06-11 13:12                   ` James Bottomley
2025-06-11 13:24                     ` KP Singh
2025-06-11 13:18                   ` James Bottomley
2025-06-11 13:41                     ` KP Singh
2025-06-11 14:43                       ` James Bottomley
2025-06-11 14:45                         ` KP Singh
2025-06-10 20:56         ` KP Singh
2025-06-12 22:56   ` Andrii Nakryiko
2025-06-06 23:29 ` [PATCH 11/12] bpftool: Add support for signing BPF programs KP Singh
2025-06-08 14:03   ` James Bottomley
2025-06-10  8:50     ` KP Singh
2025-06-10 15:56       ` James Bottomley
2025-06-10 16:41         ` KP Singh
2025-06-10 16:34       ` Blaise Boscaccy
2025-06-06 23:29 ` [PATCH 12/12] selftests/bpf: Enable signature verification for all lskel tests KP Singh
2025-06-10  0:45   ` Alexei Starovoitov
2025-06-10 16:39   ` Blaise Boscaccy
2025-06-10 16:42     ` KP Singh
2025-06-09  8:20 ` [PATCH 00/12] Signed BPF programs Toke Høiland-Jørgensen
2025-06-09 11:40   ` KP Singh
2025-06-10  9:45     ` Toke Høiland-Jørgensen
2025-06-10 11:18       ` KP Singh
2025-06-10 11:58         ` Toke Høiland-Jørgensen
2025-06-10 12:26           ` KP Singh
2025-06-10 14:25             ` Toke Høiland-Jørgensen
2025-07-08 15:15 ` Blaise Boscaccy
2025-07-10 14:49   ` KP Singh

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=87o6uvlaxs.fsf@microsoft.com \
    --to=bboscaccy@linux.microsoft.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kpsingh@kernel.org \
    --cc=kys@microsoft.com \
    --cc=linux-security-module@vger.kernel.org \
    --cc=paul@paul-moore.com \
    /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.