diff options
Diffstat (limited to 'tools/bpf/bpftool/prog.c')
-rw-r--r-- | tools/bpf/bpftool/prog.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 26336bad0442..1f209c80d906 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c | |||
@@ -750,10 +750,11 @@ static int do_detach(int argc, char **argv) | |||
750 | 750 | ||
751 | static int load_with_options(int argc, char **argv, bool first_prog_only) | 751 | static int load_with_options(int argc, char **argv, bool first_prog_only) |
752 | { | 752 | { |
753 | enum bpf_attach_type expected_attach_type; | 753 | struct bpf_object_load_attr load_attr = { 0 }; |
754 | struct bpf_object_open_attr attr = { | 754 | struct bpf_object_open_attr open_attr = { |
755 | .prog_type = BPF_PROG_TYPE_UNSPEC, | 755 | .prog_type = BPF_PROG_TYPE_UNSPEC, |
756 | }; | 756 | }; |
757 | enum bpf_attach_type expected_attach_type; | ||
757 | struct map_replace *map_replace = NULL; | 758 | struct map_replace *map_replace = NULL; |
758 | struct bpf_program *prog = NULL, *pos; | 759 | struct bpf_program *prog = NULL, *pos; |
759 | unsigned int old_map_fds = 0; | 760 | unsigned int old_map_fds = 0; |
@@ -767,7 +768,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
767 | 768 | ||
768 | if (!REQ_ARGS(2)) | 769 | if (!REQ_ARGS(2)) |
769 | return -1; | 770 | return -1; |
770 | attr.file = GET_ARG(); | 771 | open_attr.file = GET_ARG(); |
771 | pinfile = GET_ARG(); | 772 | pinfile = GET_ARG(); |
772 | 773 | ||
773 | while (argc) { | 774 | while (argc) { |
@@ -776,7 +777,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
776 | 777 | ||
777 | NEXT_ARG(); | 778 | NEXT_ARG(); |
778 | 779 | ||
779 | if (attr.prog_type != BPF_PROG_TYPE_UNSPEC) { | 780 | if (open_attr.prog_type != BPF_PROG_TYPE_UNSPEC) { |
780 | p_err("program type already specified"); | 781 | p_err("program type already specified"); |
781 | goto err_free_reuse_maps; | 782 | goto err_free_reuse_maps; |
782 | } | 783 | } |
@@ -793,7 +794,8 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
793 | strcat(type, *argv); | 794 | strcat(type, *argv); |
794 | strcat(type, "/"); | 795 | strcat(type, "/"); |
795 | 796 | ||
796 | err = libbpf_prog_type_by_name(type, &attr.prog_type, | 797 | err = libbpf_prog_type_by_name(type, |
798 | &open_attr.prog_type, | ||
797 | &expected_attach_type); | 799 | &expected_attach_type); |
798 | free(type); | 800 | free(type); |
799 | if (err < 0) | 801 | if (err < 0) |
@@ -881,16 +883,16 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
881 | 883 | ||
882 | set_max_rlimit(); | 884 | set_max_rlimit(); |
883 | 885 | ||
884 | obj = __bpf_object__open_xattr(&attr, bpf_flags); | 886 | obj = __bpf_object__open_xattr(&open_attr, bpf_flags); |
885 | if (IS_ERR_OR_NULL(obj)) { | 887 | if (IS_ERR_OR_NULL(obj)) { |
886 | p_err("failed to open object file"); | 888 | p_err("failed to open object file"); |
887 | goto err_free_reuse_maps; | 889 | goto err_free_reuse_maps; |
888 | } | 890 | } |
889 | 891 | ||
890 | bpf_object__for_each_program(pos, obj) { | 892 | bpf_object__for_each_program(pos, obj) { |
891 | enum bpf_prog_type prog_type = attr.prog_type; | 893 | enum bpf_prog_type prog_type = open_attr.prog_type; |
892 | 894 | ||
893 | if (attr.prog_type == BPF_PROG_TYPE_UNSPEC) { | 895 | if (open_attr.prog_type == BPF_PROG_TYPE_UNSPEC) { |
894 | const char *sec_name = bpf_program__title(pos, false); | 896 | const char *sec_name = bpf_program__title(pos, false); |
895 | 897 | ||
896 | err = libbpf_prog_type_by_name(sec_name, &prog_type, | 898 | err = libbpf_prog_type_by_name(sec_name, &prog_type, |
@@ -960,7 +962,12 @@ static int load_with_options(int argc, char **argv, bool first_prog_only) | |||
960 | goto err_close_obj; | 962 | goto err_close_obj; |
961 | } | 963 | } |
962 | 964 | ||
963 | err = bpf_object__load(obj); | 965 | load_attr.obj = obj; |
966 | if (verifier_logs) | ||
967 | /* log_level1 + log_level2 + stats, but not stable UAPI */ | ||
968 | load_attr.log_level = 1 + 2 + 4; | ||
969 | |||
970 | err = bpf_object__load_xattr(&load_attr); | ||
964 | if (err) { | 971 | if (err) { |
965 | p_err("failed to load object file"); | 972 | p_err("failed to load object file"); |
966 | goto err_close_obj; | 973 | goto err_close_obj; |