bpf: add BTF ids in procfs for file descriptors to BTF objects
authorQuentin Monnet <quentin.monnet@netronome.com>
Tue, 20 Aug 2019 13:53:46 +0000 (14:53 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 20 Aug 2019 14:19:12 +0000 (16:19 +0200)
Implement the show_fdinfo hook for BTF FDs file operations, and make it
print the id of the BTF object. This allows for a quick retrieval of the
BTF id from its FD; or it can help understanding what type of object
(BTF) the file descriptor points to.

v2:
- Do not expose data_size, only btf_id, in FD info.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
kernel/bpf/btf.c

index 5fcc7a17eb5a4d538ffef61335481a262bc23720..6b403dc18486a4c8c411e7f6a7c2f5ebe7eaead5 100644 (file)
@@ -3376,6 +3376,15 @@ void btf_type_seq_show(const struct btf *btf, u32 type_id, void *obj,
        btf_type_ops(t)->seq_show(btf, t, type_id, obj, 0, m);
 }
 
+#ifdef CONFIG_PROC_FS
+static void bpf_btf_show_fdinfo(struct seq_file *m, struct file *filp)
+{
+       const struct btf *btf = filp->private_data;
+
+       seq_printf(m, "btf_id:\t%u\n", btf->id);
+}
+#endif
+
 static int btf_release(struct inode *inode, struct file *filp)
 {
        btf_put(filp->private_data);
@@ -3383,6 +3392,9 @@ static int btf_release(struct inode *inode, struct file *filp)
 }
 
 const struct file_operations btf_fops = {
+#ifdef CONFIG_PROC_FS
+       .show_fdinfo    = bpf_btf_show_fdinfo,
+#endif
        .release        = btf_release,
 };