Skip to content

Commit d4238a5

Browse files
Xu KuohaiKernel Patches Daemon
authored andcommitted
bpf: Remove is_valid_bpf_tramp_flags()
Before generating bpf trampoline, x86 calls is_valid_bpf_tramp_flags() to check the input flags. This check is architecture independent. So, to be consistent with x86, arm64 should also do this check before generating bpf trampoline. However, the BPF_TRAMP_F_XXX flags are not used by user code and the flags argument is almost constant at compile time, so this run time check is a bit redundant. Remove is_valid_bpf_tramp_flags() and add some comments to the usage of BPF_TRAMP_F_XXX flags, as suggested by Alexei. Signed-off-by: Xu Kuohai <[email protected]> Acked-by: Song Liu <[email protected]> Reviewed-by: Jean-Philippe Brucker <[email protected]>
1 parent b6a9700 commit d4238a5

File tree

3 files changed

+6
-20
lines changed

3 files changed

+6
-20
lines changed

arch/x86/net/bpf_jit_comp.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,23 +1936,6 @@ static int invoke_bpf_mod_ret(const struct btf_func_model *m, u8 **pprog,
19361936
return 0;
19371937
}
19381938

1939-
static bool is_valid_bpf_tramp_flags(unsigned int flags)
1940-
{
1941-
if ((flags & BPF_TRAMP_F_RESTORE_REGS) &&
1942-
(flags & BPF_TRAMP_F_SKIP_FRAME))
1943-
return false;
1944-
1945-
/*
1946-
* BPF_TRAMP_F_RET_FENTRY_RET is only used by bpf_struct_ops,
1947-
* and it must be used alone.
1948-
*/
1949-
if ((flags & BPF_TRAMP_F_RET_FENTRY_RET) &&
1950-
(flags & ~BPF_TRAMP_F_RET_FENTRY_RET))
1951-
return false;
1952-
1953-
return true;
1954-
}
1955-
19561939
/* Example:
19571940
* __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
19581941
* its 'struct btf_func_model' will be nr_args=2
@@ -2031,9 +2014,6 @@ int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image, void *i
20312014
if (nr_args > 6)
20322015
return -ENOTSUPP;
20332016

2034-
if (!is_valid_bpf_tramp_flags(flags))
2035-
return -EINVAL;
2036-
20372017
/* Generated trampoline stack layout:
20382018
*
20392019
* RBP + 8 [ return address ]

kernel/bpf/bpf_struct_ops.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,9 @@ int bpf_struct_ops_prepare_trampoline(struct bpf_tramp_links *tlinks,
341341

342342
tlinks[BPF_TRAMP_FENTRY].links[0] = link;
343343
tlinks[BPF_TRAMP_FENTRY].nr_links = 1;
344+
/* BPF_TRAMP_F_RET_FENTRY_RET is only used by bpf_struct_ops,
345+
* and it must be used alone.
346+
*/
344347
flags = model->ret_size > 0 ? BPF_TRAMP_F_RET_FENTRY_RET : 0;
345348
return arch_prepare_bpf_trampoline(NULL, image, image_end,
346349
model, flags, tlinks, NULL);

kernel/bpf/trampoline.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,9 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr)
360360

361361
if (tlinks[BPF_TRAMP_FEXIT].nr_links ||
362362
tlinks[BPF_TRAMP_MODIFY_RETURN].nr_links)
363+
/* NOTE: BPF_TRAMP_F_RESTORE_REGS and BPF_TRAMP_F_SKIP_FRAME
364+
* should not be set together.
365+
*/
363366
flags = BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_SKIP_FRAME;
364367

365368
if (ip_arg)

0 commit comments

Comments
 (0)