Commit 47e79cbe authored by Yafang Shao's avatar Yafang Shao Committed by Daniel Borkmann

bpf: Remove bpf trampoline selector

After commit e21aa341 ("bpf: Fix fexit trampoline."), the selector is only
used to indicate how many times the bpf trampoline image are updated and been
displayed in the trampoline ksym name. After the trampoline is freed, the
selector will start from 0 again. So the selector is a useless value to the
user. We can remove it.

If the user want to check whether the bpf trampoline image has been updated
or not, the user can compare the address. Each time the trampoline image is
updated, the address will change consequently. Jiri also pointed out another
issue that perf is still using the old name "bpf_trampoline_%lu", so this
change can fix the issue in perf.

Fixes: e21aa341 ("bpf: Fix fexit trampoline.")
Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarSong Liu <song@kernel.org>
Cc: Jiri Olsa <olsajiri@gmail.com>
Link: https://lore.kernel.org/bpf/ZFvOOlrmHiY9AgXE@krava
Link: https://lore.kernel.org/bpf/20230515130849.57502-3-laoar.shao@gmail.com
parent 90564f1e
...@@ -1125,7 +1125,6 @@ struct bpf_trampoline { ...@@ -1125,7 +1125,6 @@ struct bpf_trampoline {
int progs_cnt[BPF_TRAMP_MAX]; int progs_cnt[BPF_TRAMP_MAX];
/* Executable image of trampoline */ /* Executable image of trampoline */
struct bpf_tramp_image *cur_image; struct bpf_tramp_image *cur_image;
u64 selector;
struct module *mod; struct module *mod;
}; };
......
...@@ -344,7 +344,7 @@ static void bpf_tramp_image_put(struct bpf_tramp_image *im) ...@@ -344,7 +344,7 @@ static void bpf_tramp_image_put(struct bpf_tramp_image *im)
call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks); call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
} }
static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx) static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key)
{ {
struct bpf_tramp_image *im; struct bpf_tramp_image *im;
struct bpf_ksym *ksym; struct bpf_ksym *ksym;
...@@ -371,7 +371,7 @@ static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx) ...@@ -371,7 +371,7 @@ static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx)
ksym = &im->ksym; ksym = &im->ksym;
INIT_LIST_HEAD_RCU(&ksym->lnode); INIT_LIST_HEAD_RCU(&ksym->lnode);
snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu_%u", key, idx); snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu", key);
bpf_image_ksym_add(image, ksym); bpf_image_ksym_add(image, ksym);
return im; return im;
...@@ -401,11 +401,10 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut ...@@ -401,11 +401,10 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
err = unregister_fentry(tr, tr->cur_image->image); err = unregister_fentry(tr, tr->cur_image->image);
bpf_tramp_image_put(tr->cur_image); bpf_tramp_image_put(tr->cur_image);
tr->cur_image = NULL; tr->cur_image = NULL;
tr->selector = 0;
goto out; goto out;
} }
im = bpf_tramp_image_alloc(tr->key, tr->selector); im = bpf_tramp_image_alloc(tr->key);
if (IS_ERR(im)) { if (IS_ERR(im)) {
err = PTR_ERR(im); err = PTR_ERR(im);
goto out; goto out;
...@@ -442,8 +441,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut ...@@ -442,8 +441,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
set_memory_rox((long)im->image, 1); set_memory_rox((long)im->image, 1);
WARN_ON(tr->cur_image && tr->selector == 0); WARN_ON(tr->cur_image && total == 0);
WARN_ON(!tr->cur_image && tr->selector);
if (tr->cur_image) if (tr->cur_image)
/* progs already running at this address */ /* progs already running at this address */
err = modify_fentry(tr, tr->cur_image->image, im->image, lock_direct_mutex); err = modify_fentry(tr, tr->cur_image->image, im->image, lock_direct_mutex);
...@@ -473,7 +471,6 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut ...@@ -473,7 +471,6 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
if (tr->cur_image) if (tr->cur_image)
bpf_tramp_image_put(tr->cur_image); bpf_tramp_image_put(tr->cur_image);
tr->cur_image = im; tr->cur_image = im;
tr->selector++;
out: out:
/* If any error happens, restore previous flags */ /* If any error happens, restore previous flags */
if (err) if (err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment