bpftool: Change pid_iter.bpf.c to comply with the change of bpf_link_fops.
authorKui-Feng Lee <thinker.li@gmail.com>
Thu, 30 May 2024 06:59:46 +0000 (23:59 -0700)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 30 May 2024 22:34:14 +0000 (15:34 -0700)
To support epoll, a new instance of file_operations, bpf_link_fops_poll,
has been added for links that support epoll. The pid_iter.bpf.c checks
f_ops for links and other BPF objects. The check should fail for struct_ops
links without this patch.

Acked-by: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
Link: https://lore.kernel.org/r/20240530065946.979330-9-thinker.li@gmail.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
tools/bpf/bpftool/skeleton/pid_iter.bpf.c

index 7bdbcac..948dde2 100644 (file)
@@ -29,6 +29,7 @@ enum bpf_link_type___local {
 };
 
 extern const void bpf_link_fops __ksym;
+extern const void bpf_link_fops_poll __ksym __weak;
 extern const void bpf_map_fops __ksym;
 extern const void bpf_prog_fops __ksym;
 extern const void btf_fops __ksym;
@@ -84,7 +85,11 @@ int iter(struct bpf_iter__task_file *ctx)
                fops = &btf_fops;
                break;
        case BPF_OBJ_LINK:
-               fops = &bpf_link_fops;
+               if (&bpf_link_fops_poll &&
+                   file->f_op == &bpf_link_fops_poll)
+                       fops = &bpf_link_fops_poll;
+               else
+                       fops = &bpf_link_fops;
                break;
        default:
                return 0;