History

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.

Ian Rogers committed 3 years ago

Commit 1be84ca1 parent 23671f41 file · +23 −20Browse files

Unified · Split

tools/bpf/bpftool/gen.c+23−20
@@ -708,17 +708,22 @@ static int gen_trace(struct bpf_object *obj, const char *obj_name, const char *h · 707 unmodified lines
708 708
709 codegen("\709 codegen("\
710 \n\710 \n\
711 skel->%1$s = skel_prep_map_data((void *)\"\\ \n\711 { \n\
712 ", ident);712 static const char data[] __attribute__((__aligned__(8))) = \"\\\n\
713 ");
713 mmap_data = bpf_map__initial_value(map, &mmap_size);714 mmap_data = bpf_map__initial_value(map, &mmap_size);
714 print_hex(mmap_data, mmap_size);715 print_hex(mmap_data, mmap_size);
715 codegen("\716 codegen("\
716 \n\717 \n\
717 \", %1$zd, %2$zd); \n\718 \"; \n\
718 if (!skel->%3$s) \n\719 \n\
719 goto cleanup; \n\720 skel->%1$s = skel_prep_map_data((void *)data, %2$zd,\n\
720 skel->maps.%3$s.initial_value = (__u64) (long) skel->%3$s;\n\721 sizeof(data) - 1);\n\
721 ", bpf_map_mmap_sz(map), mmap_size, ident);722 if (!skel->%1$s) \n\
723 goto cleanup; \n\
724 skel->maps.%1$s.initial_value = (__u64) (long) skel->%1$s;\n\
725 } \n\
726 ", ident, bpf_map_mmap_sz(map));
722 }727 }
723 codegen("\728 codegen("\
724 \n\729 \n\
@@ -733,32 +738,30 @@ static int gen_trace(struct bpf_object *obj, const char *obj_name, const char *h · 8 unmodified lines
733 { \n\738 { \n\
734 struct bpf_load_and_run_opts opts = {}; \n\739 struct bpf_load_and_run_opts opts = {}; \n\
735 int err; \n\740 int err; \n\
736 \n\741 static const char opts_data[] __attribute__((__aligned__(8))) = \"\\\n\
737 opts.ctx = (struct bpf_loader_ctx *)skel; \n\
738 opts.data_sz = %2$d; \n\
739 opts.data = (void *)\"\\ \n\
740 ",742 ",
741 obj_name, opts.data_sz);743 obj_name);
742 print_hex(opts.data, opts.data_sz);744 print_hex(opts.data, opts.data_sz);
743 codegen("\745 codegen("\
744 \n\746 \n\
745 \"; \n\747 \"; \n\
748 static const char opts_insn[] __attribute__((__aligned__(8))) = \"\\\n\
746 ");749 ");
747
748 codegen("\
749 \n\
750 opts.insns_sz = %d; \n\
751 opts.insns = (void *)\"\\ \n\
752 ",
753 opts.insns_sz);
754 print_hex(opts.insns, opts.insns_sz);750 print_hex(opts.insns, opts.insns_sz);
755 codegen("\751 codegen("\
756 \n\752 \n\
757 \"; \n\753 \"; \n\
754 \n\
755 opts.ctx = (struct bpf_loader_ctx *)skel; \n\
756 opts.data_sz = sizeof(opts_data) - 1; \n\
757 opts.data = (void *)opts_data; \n\
758 opts.insns_sz = sizeof(opts_insn) - 1; \n\
759 opts.insns = (void *)opts_insn; \n\
760 \n\
758 err = bpf_load_and_run(&opts); \n\761 err = bpf_load_and_run(&opts); \n\
759 if (err < 0) \n\762 if (err < 0) \n\
760 return err; \n\763 return err; \n\
761 ", obj_name);764 ");
762 bpf_object__for_each_map(map, obj) {765 bpf_object__for_each_map(map, obj) {
763 const char *mmap_flags;766 const char *mmap_flags;
764 767

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t