From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: Re: [PATCH bpf-next v5 4/8] bpf: support attaching freplace programs to multiple attach points
Date: Thu, 17 Sep 2020 07:46:08 +0800 [thread overview]
Message-ID: <202009170717.M75ewFSA%lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 26648 bytes --]
CC: kbuild-all(a)lists.01.org
In-Reply-To: <160017006133.98230.8867570651560085505.stgit@toke.dk>
References: <160017006133.98230.8867570651560085505.stgit@toke.dk>
TO: "Toke Høiland-Jørgensen" <toke@redhat.com>
Hi "Toke,
I love your patch! Perhaps something to improve:
[auto build test WARNING on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/bpf-change-logging-calls-from-verbose-to-bpf_log-and-use-log-pointer/20200916-085115
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
:::::: branch date: 23 hours ago
:::::: commit date: 23 hours ago
compiler: s390-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck warnings: (new ones prefixed by >>)
kernel/bpf/verifier.c:2624:9: warning: Identical condition 'err', second condition is always false [identicalConditionAfterEarlyExit]
return err;
^
kernel/bpf/verifier.c:2607:6: note: first condition
if (err)
^
kernel/bpf/verifier.c:2624:9: note: second condition
return err;
^
>> kernel/bpf/verifier.c:11206:36: warning: Either the condition 'if(tgt_prog&&conservative)' is redundant or there is possible null pointer dereference: tgt_prog. [nullPointerRedundantCheck]
prog->aux->tgt_prog_type != tgt_prog->type) ||
^
kernel/bpf/verifier.c:11211:6: note: Assuming that condition 'if(tgt_prog&&conservative)' is not redundant
if (tgt_prog && conservative)
^
kernel/bpf/verifier.c:11206:36: note: Null pointer dereference
prog->aux->tgt_prog_type != tgt_prog->type) ||
^
kernel/bpf/verifier.c:11208:38: warning: Either the condition 'if(tgt_prog&&conservative)' is redundant or there is possible null pointer dereference: tgt_prog. [nullPointerRedundantCheck]
prog->aux->tgt_attach_type != tgt_prog->expected_attach_type))
^
kernel/bpf/verifier.c:11211:6: note: Assuming that condition 'if(tgt_prog&&conservative)' is not redundant
if (tgt_prog && conservative)
^
kernel/bpf/verifier.c:11208:38: note: Null pointer dereference
prog->aux->tgt_attach_type != tgt_prog->expected_attach_type))
^
kernel/bpf/verifier.c:11377:6: warning: Variable 'ret' is reassigned a value before the old one has been used. [redundantAssignment]
ret = -ENOMEM;
^
kernel/bpf/verifier.c:11359:0: note: Variable 'ret' is reassigned a value before the old one has been used.
int i, len, ret = -EINVAL;
^
kernel/bpf/verifier.c:11377:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = -ENOMEM;
^
kernel/bpf/verifier.c:11434:6: warning: Variable 'ret' is reassigned a value before the old one has been used. [redundantAssignment]
ret = replace_map_fd_with_map_ptr(env);
^
kernel/bpf/verifier.c:11377:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = -ENOMEM;
^
kernel/bpf/verifier.c:11434:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = replace_map_fd_with_map_ptr(env);
^
kernel/bpf/verifier.c:11434:6: warning: Variable 'ret' is reassigned a value before the old one has been used. [redundantAssignment]
ret = replace_map_fd_with_map_ptr(env);
^
kernel/bpf/verifier.c:11405:7: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = -EINVAL;
^
kernel/bpf/verifier.c:11434:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = replace_map_fd_with_map_ptr(env);
^
kernel/bpf/verifier.c:11451:6: warning: Variable 'ret' is reassigned a value before the old one has been used. [redundantAssignment]
ret = check_subprogs(env);
^
kernel/bpf/verifier.c:11447:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = -ENOMEM;
^
kernel/bpf/verifier.c:11451:6: note: Variable 'ret' is reassigned a value before the old one has been used.
ret = check_subprogs(env);
^
kernel/bpf/verifier.c:1963:25: warning: Local variable func shadows outer function [shadowFunction]
struct bpf_func_state *func;
^
kernel/bpf/verifier.c:535:31: note: Shadowed declaration
static struct bpf_func_state *func(struct bpf_verifier_env *env,
^
kernel/bpf/verifier.c:1963:25: note: Shadow variable
struct bpf_func_state *func;
^
kernel/bpf/verifier.c:1996:25: warning: Local variable func shadows outer function [shadowFunction]
struct bpf_func_state *func;
^
kernel/bpf/verifier.c:535:31: note: Shadowed declaration
static struct bpf_func_state *func(struct bpf_verifier_env *env,
^
kernel/bpf/verifier.c:1996:25: note: Shadow variable
struct bpf_func_state *func;
^
kernel/bpf/verifier.c:7316:25: warning: Local variable src_reg shadows outer variable [shadowVar]
struct bpf_reg_state *src_reg = ®s[insn->src_reg];
^
kernel/bpf/verifier.c:7220:54: note: Shadowed declaration
struct bpf_reg_state *dst_reg, *other_branch_regs, *src_reg = NULL;
^
kernel/bpf/verifier.c:7316:25: note: Shadow variable
struct bpf_reg_state *src_reg = ®s[insn->src_reg];
# https://github.com/0day-ci/linux/commit/63e92b3278bbe1301a49b822500ebed166c130a3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Toke-H-iland-J-rgensen/bpf-change-logging-calls-from-verbose-to-bpf_log-and-use-log-pointer/20200916-085115
git checkout 63e92b3278bbe1301a49b822500ebed166c130a3
vim +11206 kernel/bpf/verifier.c
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11039
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11040 int bpf_check_attach_target(struct bpf_verifier_log *log,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11041 const struct bpf_prog *prog,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11042 const struct bpf_prog *tgt_prog,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11043 u32 btf_id,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11044 struct btf_func_model *fmodel,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11045 long *tgt_addr,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11046 const char **tgt_name,
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11047 const struct btf_type **tgt_type)
38207291604401 Martin KaFai Lau 2019-10-24 11048 {
be8704ff07d237 Alexei Starovoitov 2020-01-20 11049 bool prog_extension = prog->type == BPF_PROG_TYPE_EXT;
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11050 const char prefix[] = "btf_trace_";
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11051 int ret = 0, subprog = -1, i;
38207291604401 Martin KaFai Lau 2019-10-24 11052 const struct btf_type *t;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11053 bool conservative = true;
38207291604401 Martin KaFai Lau 2019-10-24 11054 const char *tname;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11055 struct btf *btf;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11056 long addr = 0;
38207291604401 Martin KaFai Lau 2019-10-24 11057
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11058 if (!btf_id) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11059 bpf_log(log, "Tracing programs must provide btf_id\n");
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11060 return -EINVAL;
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11061 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11062 btf = tgt_prog ? tgt_prog->aux->btf : btf_vmlinux;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11063 if (!btf) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11064 bpf_log(log,
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11065 "FENTRY/FEXIT program can only be attached to another program annotated with BTF\n");
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11066 return -EINVAL;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11067 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11068 t = btf_type_by_id(btf, btf_id);
38207291604401 Martin KaFai Lau 2019-10-24 11069 if (!t) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11070 bpf_log(log, "attach_btf_id %u is invalid\n", btf_id);
38207291604401 Martin KaFai Lau 2019-10-24 11071 return -EINVAL;
38207291604401 Martin KaFai Lau 2019-10-24 11072 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11073 tname = btf_name_by_offset(btf, t->name_off);
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11074 if (!tname) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11075 bpf_log(log, "attach_btf_id %u doesn't have a name\n", btf_id);
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11076 return -EINVAL;
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11077 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11078 if (tgt_prog) {
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11079 struct bpf_prog_aux *aux = tgt_prog->aux;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11080
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11081 for (i = 0; i < aux->func_info_cnt; i++)
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11082 if (aux->func_info[i].type_id == btf_id) {
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11083 subprog = i;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11084 break;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11085 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11086 if (subprog == -1) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11087 bpf_log(log, "Subprog %s doesn't exist\n", tname);
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11088 return -EINVAL;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11089 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11090 conservative = aux->func_info_aux[subprog].unreliable;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11091 if (prog_extension) {
be8704ff07d237 Alexei Starovoitov 2020-01-20 11092 if (conservative) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11093 bpf_log(log,
be8704ff07d237 Alexei Starovoitov 2020-01-20 11094 "Cannot replace static functions\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11095 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11096 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11097 if (!prog->jit_requested) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11098 bpf_log(log,
be8704ff07d237 Alexei Starovoitov 2020-01-20 11099 "Extension programs should be JITed\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11100 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11101 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11102 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11103 if (!tgt_prog->jited) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11104 bpf_log(log, "Can attach to only JITed progs\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11105 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11106 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11107 if (tgt_prog->type == prog->type) {
be8704ff07d237 Alexei Starovoitov 2020-01-20 11108 /* Cannot fentry/fexit another fentry/fexit program.
be8704ff07d237 Alexei Starovoitov 2020-01-20 11109 * Cannot attach program extension to another extension.
be8704ff07d237 Alexei Starovoitov 2020-01-20 11110 * It's ok to attach fentry/fexit to extension program.
be8704ff07d237 Alexei Starovoitov 2020-01-20 11111 */
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11112 bpf_log(log, "Cannot recursively attach\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11113 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11114 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11115 if (tgt_prog->type == BPF_PROG_TYPE_TRACING &&
be8704ff07d237 Alexei Starovoitov 2020-01-20 11116 prog_extension &&
be8704ff07d237 Alexei Starovoitov 2020-01-20 11117 (tgt_prog->expected_attach_type == BPF_TRACE_FENTRY ||
be8704ff07d237 Alexei Starovoitov 2020-01-20 11118 tgt_prog->expected_attach_type == BPF_TRACE_FEXIT)) {
be8704ff07d237 Alexei Starovoitov 2020-01-20 11119 /* Program extensions can extend all program types
be8704ff07d237 Alexei Starovoitov 2020-01-20 11120 * except fentry/fexit. The reason is the following.
be8704ff07d237 Alexei Starovoitov 2020-01-20 11121 * The fentry/fexit programs are used for performance
be8704ff07d237 Alexei Starovoitov 2020-01-20 11122 * analysis, stats and can be attached to any program
be8704ff07d237 Alexei Starovoitov 2020-01-20 11123 * type except themselves. When extension program is
be8704ff07d237 Alexei Starovoitov 2020-01-20 11124 * replacing XDP function it is necessary to allow
be8704ff07d237 Alexei Starovoitov 2020-01-20 11125 * performance analysis of all functions. Both original
be8704ff07d237 Alexei Starovoitov 2020-01-20 11126 * XDP program and its program extension. Hence
be8704ff07d237 Alexei Starovoitov 2020-01-20 11127 * attaching fentry/fexit to BPF_PROG_TYPE_EXT is
be8704ff07d237 Alexei Starovoitov 2020-01-20 11128 * allowed. If extending of fentry/fexit was allowed it
be8704ff07d237 Alexei Starovoitov 2020-01-20 11129 * would be possible to create long call chain
be8704ff07d237 Alexei Starovoitov 2020-01-20 11130 * fentry->extension->fentry->extension beyond
be8704ff07d237 Alexei Starovoitov 2020-01-20 11131 * reasonable stack size. Hence extending fentry is not
be8704ff07d237 Alexei Starovoitov 2020-01-20 11132 * allowed.
be8704ff07d237 Alexei Starovoitov 2020-01-20 11133 */
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11134 bpf_log(log, "Cannot extend fentry/fexit\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11135 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11136 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11137 } else {
be8704ff07d237 Alexei Starovoitov 2020-01-20 11138 if (prog_extension) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11139 bpf_log(log, "Cannot replace kernel functions\n");
be8704ff07d237 Alexei Starovoitov 2020-01-20 11140 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11141 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11142 }
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11143
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11144 switch (prog->expected_attach_type) {
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11145 case BPF_TRACE_RAW_TP:
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11146 if (tgt_prog) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11147 bpf_log(log,
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11148 "Only FENTRY/FEXIT progs are attachable to another BPF prog\n");
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11149 return -EINVAL;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11150 }
38207291604401 Martin KaFai Lau 2019-10-24 11151 if (!btf_type_is_typedef(t)) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11152 bpf_log(log, "attach_btf_id %u is not a typedef\n",
38207291604401 Martin KaFai Lau 2019-10-24 11153 btf_id);
38207291604401 Martin KaFai Lau 2019-10-24 11154 return -EINVAL;
38207291604401 Martin KaFai Lau 2019-10-24 11155 }
f1b9509c2fb0ef Alexei Starovoitov 2019-10-30 11156 if (strncmp(prefix, tname, sizeof(prefix) - 1)) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11157 bpf_log(log, "attach_btf_id %u points to wrong type name %s\n",
38207291604401 Martin KaFai Lau 2019-10-24 11158 btf_id, tname);
38207291604401 Martin KaFai Lau 2019-10-24 11159 return -EINVAL;
38207291604401 Martin KaFai Lau 2019-10-24 11160 }
38207291604401 Martin KaFai Lau 2019-10-24 11161 tname += sizeof(prefix) - 1;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11162 t = btf_type_by_id(btf, t->type);
38207291604401 Martin KaFai Lau 2019-10-24 11163 if (!btf_type_is_ptr(t))
38207291604401 Martin KaFai Lau 2019-10-24 11164 /* should never happen in valid vmlinux build */
38207291604401 Martin KaFai Lau 2019-10-24 11165 return -EINVAL;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11166 t = btf_type_by_id(btf, t->type);
38207291604401 Martin KaFai Lau 2019-10-24 11167 if (!btf_type_is_func_proto(t))
38207291604401 Martin KaFai Lau 2019-10-24 11168 /* should never happen in valid vmlinux build */
38207291604401 Martin KaFai Lau 2019-10-24 11169 return -EINVAL;
38207291604401 Martin KaFai Lau 2019-10-24 11170
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11171 break;
15d83c4d7cef5c Yonghong Song 2020-05-09 11172 case BPF_TRACE_ITER:
15d83c4d7cef5c Yonghong Song 2020-05-09 11173 if (!btf_type_is_func(t)) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11174 bpf_log(log, "attach_btf_id %u is not a function\n",
15d83c4d7cef5c Yonghong Song 2020-05-09 11175 btf_id);
15d83c4d7cef5c Yonghong Song 2020-05-09 11176 return -EINVAL;
15d83c4d7cef5c Yonghong Song 2020-05-09 11177 }
15d83c4d7cef5c Yonghong Song 2020-05-09 11178 t = btf_type_by_id(btf, t->type);
15d83c4d7cef5c Yonghong Song 2020-05-09 11179 if (!btf_type_is_func_proto(t))
15d83c4d7cef5c Yonghong Song 2020-05-09 11180 return -EINVAL;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11181 ret = btf_distill_func_proto(log, btf, t, tname, fmodel);
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11182 if (ret)
15d83c4d7cef5c Yonghong Song 2020-05-09 11183 return ret;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11184 break;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11185 default:
be8704ff07d237 Alexei Starovoitov 2020-01-20 11186 if (!prog_extension)
be8704ff07d237 Alexei Starovoitov 2020-01-20 11187 return -EINVAL;
be8704ff07d237 Alexei Starovoitov 2020-01-20 11188 /* fallthrough */
ae24082331d9bb KP Singh 2020-03-04 11189 case BPF_MODIFY_RETURN:
9e4e01dfd3254c KP Singh 2020-03-29 11190 case BPF_LSM_MAC:
fec56f5890d93f Alexei Starovoitov 2019-11-14 11191 case BPF_TRACE_FENTRY:
fec56f5890d93f Alexei Starovoitov 2019-11-14 11192 case BPF_TRACE_FEXIT:
fec56f5890d93f Alexei Starovoitov 2019-11-14 11193 if (!btf_type_is_func(t)) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11194 bpf_log(log, "attach_btf_id %u is not a function\n",
fec56f5890d93f Alexei Starovoitov 2019-11-14 11195 btf_id);
fec56f5890d93f Alexei Starovoitov 2019-11-14 11196 return -EINVAL;
fec56f5890d93f Alexei Starovoitov 2019-11-14 11197 }
be8704ff07d237 Alexei Starovoitov 2020-01-20 11198 if (prog_extension &&
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11199 btf_check_type_match(log, prog, btf, t))
be8704ff07d237 Alexei Starovoitov 2020-01-20 11200 return -EINVAL;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11201 t = btf_type_by_id(btf, t->type);
fec56f5890d93f Alexei Starovoitov 2019-11-14 11202 if (!btf_type_is_func_proto(t))
fec56f5890d93f Alexei Starovoitov 2019-11-14 11203 return -EINVAL;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11204
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 11205 if ((prog->aux->tgt_prog_type &&
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 @11206 prog->aux->tgt_prog_type != tgt_prog->type) ||
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 11207 (prog->aux->tgt_attach_type &&
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 11208 prog->aux->tgt_attach_type != tgt_prog->expected_attach_type))
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 11209 return -EINVAL;
63e92b3278bbe1 Toke Høiland-Jørgensen 2020-09-15 11210
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11211 if (tgt_prog && conservative)
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11212 t = NULL;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11213
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11214 ret = btf_distill_func_proto(log, btf, t, tname, fmodel);
fec56f5890d93f Alexei Starovoitov 2019-11-14 11215 if (ret < 0)
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11216 return ret;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11217
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11218 if (tgt_prog) {
e9eeec58c992c4 Yonghong Song 2019-12-04 11219 if (subprog == 0)
e9eeec58c992c4 Yonghong Song 2019-12-04 11220 addr = (long) tgt_prog->bpf_func;
e9eeec58c992c4 Yonghong Song 2019-12-04 11221 else
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11222 addr = (long) tgt_prog->aux->func[subprog]->bpf_func;
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11223 } else {
fec56f5890d93f Alexei Starovoitov 2019-11-14 11224 addr = kallsyms_lookup_name(tname);
fec56f5890d93f Alexei Starovoitov 2019-11-14 11225 if (!addr) {
2bc773a4b52761 Toke Høiland-Jørgensen 2020-09-15 11226 bpf_log(log,
fec56f5890d93f Alexei Starovoitov 2019-11-14 11227 "The address of function %s cannot be found\n",
fec56f5890d93f Alexei Starovoitov 2019-11-14 11228 tname);
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11229 return -ENOENT;
fec56f5890d93f Alexei Starovoitov 2019-11-14 11230 }
5b92a28aae4dd0 Alexei Starovoitov 2019-11-14 11231 }
18644cec714aab Alexei Starovoitov 2020-05-28 11232
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11233 if (prog->aux->sleepable) {
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11234 ret = -EINVAL;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11235 switch (prog->type) {
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11236 case BPF_PROG_TYPE_TRACING:
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11237 /* fentry/fexit/fmod_ret progs can be sleepable only if they are
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11238 * attached to ALLOW_ERROR_INJECTION and are not in denylist.
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11239 */
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11240 if (!check_non_sleepable_error_inject(btf_id) &&
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11241 within_error_injection_list(addr))
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11242 ret = 0;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11243 break;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11244 case BPF_PROG_TYPE_LSM:
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11245 /* LSM progs check that they are attached to bpf_lsm_*() funcs.
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11246 * Only some of them are sleepable.
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11247 */
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11248 if (check_sleepable_lsm_hook(btf_id))
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11249 ret = 0;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11250 break;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11251 default:
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11252 break;
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11253 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11254 if (ret) {
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11255 bpf_log(log, "%s is not sleepable\n", tname);
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11256 return ret;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11257 }
1e6c62a8821557 Alexei Starovoitov 2020-08-27 11258 } else if (prog->expected_attach_type == BPF_MODIFY_RETURN) {
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11259 ret = check_attach_modify_return(prog, addr, tname);
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11260 if (ret) {
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11261 bpf_log(log, "%s() is not modifiable\n", tname);
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11262 return ret;
18644cec714aab Alexei Starovoitov 2020-05-28 11263 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11264 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11265
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11266 break;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11267 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11268 *tgt_addr = addr;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11269 if (tgt_name)
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11270 *tgt_name = tname;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11271 if (tgt_type)
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11272 *tgt_type = t;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11273 return 0;
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11274 }
23c5f908e2d812 Toke Høiland-Jørgensen 2020-09-15 11275
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2020-09-16 23:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-16 23:46 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2020-09-15 11:40 [PATCH bpf-next v5 0/8] bpf: Support multi-attach for freplace programs Toke Høiland-Jørgensen
2020-09-15 11:41 ` [PATCH bpf-next v5 4/8] bpf: support attaching freplace programs to multiple attach points Toke Høiland-Jørgensen
2020-09-16 19:49 ` Andrii Nakryiko
2020-09-16 21:13 ` Toke Høiland-Jørgensen
2020-09-16 21:17 ` Andrii Nakryiko
2020-09-16 21:27 ` Toke Høiland-Jørgensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202009170717.M75ewFSA%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.