bpftool: Align bpf_load_and_run_opts insns and data
A C string lacks alignment so use aligned arrays to avoid potential alignment problems. Switch to using sizeof (less 1 for the \0 terminator) rather than a hardcode size constant. Signed-off-by: Ian Rogers <irogers@google.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Quentin Monnet <quentin@isovalent.com> Link: https://lore.kernel.org/bpf/20231007044439.25171-2-irogers@google.com
This commit is contained in:
parent
23671f4dfd
commit
1be84ca53c
|
@ -708,17 +708,22 @@ static int gen_trace(struct bpf_object *obj, const char *obj_name, const char *h
|
|||
|
||||
codegen("\
|
||||
\n\
|
||||
skel->%1$s = skel_prep_map_data((void *)\"\\ \n\
|
||||
", ident);
|
||||
{ \n\
|
||||
static const char data[] __attribute__((__aligned__(8))) = \"\\\n\
|
||||
");
|
||||
mmap_data = bpf_map__initial_value(map, &mmap_size);
|
||||
print_hex(mmap_data, mmap_size);
|
||||
codegen("\
|
||||
\n\
|
||||
\", %1$zd, %2$zd); \n\
|
||||
if (!skel->%3$s) \n\
|
||||
\"; \n\
|
||||
\n\
|
||||
skel->%1$s = skel_prep_map_data((void *)data, %2$zd,\n\
|
||||
sizeof(data) - 1);\n\
|
||||
if (!skel->%1$s) \n\
|
||||
goto cleanup; \n\
|
||||
skel->maps.%3$s.initial_value = (__u64) (long) skel->%3$s;\n\
|
||||
", bpf_map_mmap_sz(map), mmap_size, ident);
|
||||
skel->maps.%1$s.initial_value = (__u64) (long) skel->%1$s;\n\
|
||||
} \n\
|
||||
", ident, bpf_map_mmap_sz(map));
|
||||
}
|
||||
codegen("\
|
||||
\n\
|
||||
|
@ -733,32 +738,30 @@ static int gen_trace(struct bpf_object *obj, const char *obj_name, const char *h
|
|||
{ \n\
|
||||
struct bpf_load_and_run_opts opts = {}; \n\
|
||||
int err; \n\
|
||||
\n\
|
||||
opts.ctx = (struct bpf_loader_ctx *)skel; \n\
|
||||
opts.data_sz = %2$d; \n\
|
||||
opts.data = (void *)\"\\ \n\
|
||||
static const char opts_data[] __attribute__((__aligned__(8))) = \"\\\n\
|
||||
",
|
||||
obj_name, opts.data_sz);
|
||||
obj_name);
|
||||
print_hex(opts.data, opts.data_sz);
|
||||
codegen("\
|
||||
\n\
|
||||
\"; \n\
|
||||
static const char opts_insn[] __attribute__((__aligned__(8))) = \"\\\n\
|
||||
");
|
||||
|
||||
codegen("\
|
||||
\n\
|
||||
opts.insns_sz = %d; \n\
|
||||
opts.insns = (void *)\"\\ \n\
|
||||
",
|
||||
opts.insns_sz);
|
||||
print_hex(opts.insns, opts.insns_sz);
|
||||
codegen("\
|
||||
\n\
|
||||
\"; \n\
|
||||
\n\
|
||||
opts.ctx = (struct bpf_loader_ctx *)skel; \n\
|
||||
opts.data_sz = sizeof(opts_data) - 1; \n\
|
||||
opts.data = (void *)opts_data; \n\
|
||||
opts.insns_sz = sizeof(opts_insn) - 1; \n\
|
||||
opts.insns = (void *)opts_insn; \n\
|
||||
\n\
|
||||
err = bpf_load_and_run(&opts); \n\
|
||||
if (err < 0) \n\
|
||||
return err; \n\
|
||||
", obj_name);
|
||||
");
|
||||
bpf_object__for_each_map(map, obj) {
|
||||
const char *mmap_flags;
|
||||
|
||||
|
|
Loading…
Reference in New Issue