Re: [RFC PATCH 08/20] bpf: Add Landlock ruleset map type
From: Justin Suess
Date: Fri Apr 17 2026 - 16:33:23 EST
On Fri, Apr 17, 2026 at 08:03:14PM +0200, Mickaël Salaün wrote:
> On Fri, Apr 17, 2026 at 12:51:40PM -0400, Justin Suess wrote:
> > On Fri, Apr 17, 2026 at 05:18:05PM +0200, Mickaël Salaün wrote:
> > > On Fri, Apr 17, 2026 at 10:09:13AM -0400, Justin Suess wrote:
> > > > On Thu, Apr 16, 2026 at 04:47:40PM -0700, Song Liu wrote:
> > > > > On Thu, Apr 16, 2026 at 2:53 PM Justin Suess <utilityemal77@xxxxxxxxx> wrote:
> > [...]
> > > Why not using proper typing with a dedicated map?
> > >
> >
> > I may be misunderstanding, but from what I see, a __kptr DOES give
> > proper typing, __kptr is an annotation not a type.
>
> Ok, good.
>
> >
> > This is what it would look like in an BPF_MAP_TYPE_ARRAY.
> >
> > struct ruleset_kptr_value {
> > struct bpf_landlock_ruleset __kptr * ruleset;
> > };
> >
> > struct {
> > __uint(type, BPF_MAP_TYPE_ARRAY);
> > __uint(max_entries, 1);
> > __type(key, __u32);
> > __type(value, struct ruleset_kptr_value);
> > } ruleset_kptr_map SEC(".maps");
> >
> > So we get proper typing from what I see. (It's not like a __kptr is a
> > special void*, it has a type)
>
> Looks good.
>
> [...]
> >
> > The answer the the lifetime part is yes.
> >
> > The kptr destructors and the landlock ruleset refcounting give us that
> > abstraction. (along with the KF_ACQUIRE/KF_RELEASE annotations and
> > destructor implementation)
>
> Good.
>
> >
> > > to the caller) and pass them as file descriptor?
> > This "pass them as a file descriptor" is the tricky part. It would be
> > very convenient if we could send the fd to bpf from userspace and have
> > it be implicitly converted (like in the BPF_MAP_TYPE_LANDLOCK_RULESET
> > implementation) in one step, but I just don't see a way to do that with
> > the bpf_landlock_get_ruleset_from_fd kfunc approach.
>
> Song's idea to have a generic FD map looks promising.
>
I agree the generic FD map sounds like a good fit.
So this would be three parts like:
1. The new point-of-no-return flags for NNP and staging domain to
execution time in Landlock. Selftests and doc updates.
2. The generic FD map implementation for bpf. Selftests and doc updates.
3. The BPF kfunc implementations for Landlock using the same point-of-no
return staging. Selftests and doc updates.
The scope of which is probably too big for one series.
Luckily part 1 is pretty close to being done as part of my work for v2
of this series, and can standalone as a preparatory series for Landlock,
since it adds flags and features that have utility outside of BPF.
Open for ideas on how to split this up (or even better, for some help in
implementation or prior works).
I'd like to get some feedback and figue out what this generic fd map
should look like and get some more eyes on that idea to avoid wasting
reviewer time on an unsuitable implementation.
Justin