[PATCH 09/12] libbpf: Update light skeleton for signing

Alexei Starovoitov alexei.starovoitov at gmail.com
Mon Jun 9 21:41:59 UTC 2025


On Fri, Jun 6, 2025 at 4:29 PM KP Singh <kpsingh at kernel.org> wrote:
>
> * The metadata map is created with as an exclusive map (with an
> excl_prog_hash) This restricts map access exclusively to the signed
> loader program, preventing tampering by other processes.
>
> * The map is then frozen, making it read-only from userspace.
>
> * BPF_OBJ_GET_INFO_BY_ID instructs the kernel to compute the hash of the
>   metadata map (H') and store it in bpf_map->sha.
>
> * The loader is then loaded with the signature which is then verified by
>   the kernel.
>
> The sekeleton currently uses the session keyring
> (KEY_SPEC_SESSION_KEYRING) by default but this can
> be overridden by the user of the skeleton.
>
> Signed-off-by: KP Singh <kpsingh at kernel.org>
> ---
>  tools/lib/bpf/skel_internal.h | 57 +++++++++++++++++++++++++++++++++--
>  1 file changed, 54 insertions(+), 3 deletions(-)
>
> diff --git a/tools/lib/bpf/skel_internal.h b/tools/lib/bpf/skel_internal.h
> index 4d5fa079b5d6..25502925ff36 100644
> --- a/tools/lib/bpf/skel_internal.h
> +++ b/tools/lib/bpf/skel_internal.h
> @@ -13,6 +13,7 @@
>  #include <unistd.h>
>  #include <sys/syscall.h>
>  #include <sys/mman.h>
> +#include <linux/keyctl.h>
>  #include <stdlib.h>
>  #include "bpf.h"
>  #endif
> @@ -64,6 +65,11 @@ struct bpf_load_and_run_opts {
>         __u32 data_sz;
>         __u32 insns_sz;
>         const char *errstr;
> +       void *signature;
> +       __u32 signature_sz;
> +       __u32 keyring_id;
> +       void * excl_prog_hash;
> +       __u32 excl_prog_hash_sz;
>  };
>
>  long kern_sys_bpf(__u32 cmd, void *attr, __u32 attr_size);
> @@ -218,16 +224,21 @@ static inline int skel_closenz(int fd)
>
>  static inline int skel_map_create(enum bpf_map_type map_type,
>                                   const char *map_name,
> +                                 const void *excl_prog_hash,
> +                               __u32 excl_prog_hash_sz,
>                                   __u32 key_size,
>                                   __u32 value_size,
>                                   __u32 max_entries)

A bit odd to insert new args in the middle. Add them to the end.



More information about the Linux-security-module-archive mailing list