bpf: Add BPF_PROG_GET_FD_BY_ID
Add BPF_PROG_GET_FD_BY_ID command to allow user to get a fd from a bpf_prog's ID. bpf_prog_inc_not_zero() is added and is called with prog_idr_lock held. __bpf_prog_put() is also added which has the 'bool do_idr_lock' param to decide if the prog_idr_lock should be acquired when freeing the prog->id. In the error path of bpf_prog_inc_not_zero(), it may have to call __bpf_prog_put(map, false) which does not need to take the prog_idr_lock when freeing the prog->id. It is currently limited to CAP_SYS_ADMIN which we can consider to lift it in followup patches. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Acked-by: Alexei Starovoitov <ast@fb.com> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
34ad5580f8
commit
b16d9aa4c2
@@ -84,6 +84,7 @@ enum bpf_cmd {
|
||||
BPF_PROG_TEST_RUN,
|
||||
BPF_PROG_GET_NEXT_ID,
|
||||
BPF_MAP_GET_NEXT_ID,
|
||||
BPF_PROG_GET_FD_BY_ID,
|
||||
};
|
||||
|
||||
enum bpf_map_type {
|
||||
@@ -212,8 +213,11 @@ union bpf_attr {
|
||||
__u32 duration;
|
||||
} test;
|
||||
|
||||
struct { /* anonymous struct used by BPF_*_GET_NEXT_ID */
|
||||
__u32 start_id;
|
||||
struct { /* anonymous struct used by BPF_*_GET_*_ID */
|
||||
union {
|
||||
__u32 start_id;
|
||||
__u32 prog_id;
|
||||
};
|
||||
__u32 next_id;
|
||||
};
|
||||
} __attribute__((aligned(8)));
|
||||
|
Reference in New Issue
Block a user