Skip to content

Commit 02492c6

Browse files
committed
bpf, s390: Make program update work for trampoline ops
Use update_prog in place of current link prog when link matches update_link. Signed-off-by: Jordan Rife <[email protected]>
1 parent aba78db commit 02492c6

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

arch/s390/net/bpf_jit_comp.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2508,20 +2508,19 @@ static void load_imm64(struct bpf_jit *jit, int dst_reg, u64 val)
25082508

25092509
static int invoke_bpf_prog(struct bpf_tramp_jit *tjit,
25102510
const struct btf_func_model *m,
2511-
struct bpf_tramp_link *tlink, bool save_ret)
2511+
struct bpf_prog *p, u64 cookie, bool save_ret)
25122512
{
25132513
struct bpf_jit *jit = &tjit->common;
25142514
int cookie_off = tjit->run_ctx_off +
25152515
offsetof(struct bpf_tramp_run_ctx, bpf_cookie);
2516-
struct bpf_prog *p = tlink->link.prog;
25172516
int patch;
25182517

25192518
/*
2520-
* run_ctx.cookie = tlink->cookie;
2519+
* run_ctx.cookie = cookie;
25212520
*/
25222521

2523-
/* %r0 = tlink->cookie */
2524-
load_imm64(jit, REG_W0, tlink->cookie);
2522+
/* %r0 = cookie */
2523+
load_imm64(jit, REG_W0, cookie);
25252524
/* stg %r0,cookie_off(%r15) */
25262525
EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, REG_0, REG_15, cookie_off);
25272526

@@ -2768,7 +2767,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
27682767
}
27692768

27702769
for (i = 0; i < fentry->nr_links; i++)
2771-
if (invoke_bpf_prog(tjit, m, fentry->links[i],
2770+
if (invoke_bpf_prog(tjit, m, bpf_tramp_links_prog(fentry, i),
2771+
fentry->links[i]->cookie,
27722772
flags & BPF_TRAMP_F_RET_FENTRY_RET))
27732773
return -EINVAL;
27742774

@@ -2782,7 +2782,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
27822782
0xf000 | tjit->retval_off);
27832783

27842784
for (i = 0; i < fmod_ret->nr_links; i++) {
2785-
if (invoke_bpf_prog(tjit, m, fmod_ret->links[i], true))
2785+
if (invoke_bpf_prog(tjit, m,
2786+
bpf_tramp_links_prog(fmod_ret, i),
2787+
fmod_ret->links[i]->cookie, true))
27862788
return -EINVAL;
27872789

27882790
/*
@@ -2850,7 +2852,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
28502852
/* do_fexit: */
28512853
tjit->do_fexit = jit->prg;
28522854
for (i = 0; i < fexit->nr_links; i++)
2853-
if (invoke_bpf_prog(tjit, m, fexit->links[i], false))
2855+
if (invoke_bpf_prog(tjit, m, bpf_tramp_links_prog(fexit, i),
2856+
fexit->links[i]->cookie, false))
28542857
return -EINVAL;
28552858

28562859
if (flags & BPF_TRAMP_F_CALL_ORIG) {
@@ -2946,6 +2949,11 @@ int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image,
29462949
return ret < 0 ? ret : tjit.common.prg;
29472950
}
29482951

2952+
bool bpf_trampoline_supports_update_prog(void)
2953+
{
2954+
return true;
2955+
}
2956+
29492957
bool bpf_jit_supports_subprog_tailcalls(void)
29502958
{
29512959
return true;

0 commit comments

Comments
 (0)