On Tue, Dec 12, 2023 at 8:12 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Tue, Dec 12, 2023 at 10:25:45AM -0800, Andrii Nakryiko wrote: > > Add BPF token support to BPF object-level functionality. > > > > BPF token is supported by BPF object logic either as an explicitly > > provided BPF token from outside (through BPF FS path or explicit BPF > > token FD), or implicitly (unless prevented through > > bpf_object_open_opts). > > > > Implicit mode is assumed to be the most common one for user namespaced > > unprivileged workloads. The assumption is that privileged container > > manager sets up default BPF FS mount point at /sys/fs/bpf with BPF token > > delegation options (delegate_{cmds,maps,progs,attachs} mount options). > > BPF object during loading will attempt to create BPF token from > > /sys/fs/bpf location, and pass it for all relevant operations > > (currently, map creation, BTF load, and program load). > > > > In this implicit mode, if BPF token creation fails due to whatever > > reason (BPF FS is not mounted, or kernel doesn't support BPF token, > > etc), this is not considered an error. BPF object loading sequence will > > proceed with no BPF token. > > > > In explicit BPF token mode, user provides explicitly either custom BPF > > FS mount point path or creates BPF token on their own and just passes > > token FD directly. In such case, BPF object will either dup() token FD > > (to not require caller to hold onto it for entire duration of BPF object > > lifetime) or will attempt to create BPF token from provided BPF FS > > location. If BPF token creation fails, that is considered a critical > > error and BPF object load fails with an error. > > > > Libbpf provides a way to disable implicit BPF token creation, if it > > causes any troubles (BPF token is designed to be completely optional and > > shouldn't cause any problems even if provided, but in the world of BPF > > LSM, custom security logic can be installed that might change outcome > > dependin on the presence of BPF token). To disable libbpf's default BPF > > token creation behavior user should provide either invalid BPF token FD > > (negative), or empty bpf_token_path option. > > Have you considered an external (to the application) way to provide bpffs path > and enable/disable implicit mode? > Since libbpf is trying to provide the seamless use of token (just recompiling > with new libbpf and admin setup) it seems the admin should be able to pick > the location as well. envvar would be one way. I haven't considered this yet, but I see the point. I can define a LIBBPF_BPF_TOKEN_PATH envvar which will be used if the user didn't explicitly provide a path or token fd through bpf_object_open_opts. Enable/disable semantics will be the same as bpf_object_open_opts->bpf_token_path: unset - default value, empty - disable, otherwise it will point to BPF FS location. I'll add it as a separate patch in the next revision.