Thread (79 messages) 79 messages, 9 authors, 2025-07-14

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

From: Alexei Starovoitov <hidden>
Date: 2025-06-09 21:42:11
Also in: bpf

On Fri, Jun 6, 2025 at 4:29 PM KP Singh [off-list ref] wrote:
quoted hunk ↗ jump to hunk
* 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@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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help