Re: [PATCH bpf-next 2/5] bpf: tracing: support to attach program to multi hooks

From: Dan Carpenter
Date: Wed Feb 21 2024 - 00:31:26 EST


Hi Menglong,

kernel test robot noticed the following build warnings:

url: https://github.com/intel-lab-lkp/linux/commits/Menglong-Dong/bpf-tracing-add-support-to-record-and-check-the-accessed-args/20240220-115317
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20240220035105.34626-3-dongmenglong.8%40bytedance.com
patch subject: [PATCH bpf-next 2/5] bpf: tracing: support to attach program to multi hooks
config: m68k-randconfig-r071-20240220 (https://download.01.org/0day-ci/archive/20240221/202402210534.siGKEfus-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 13.2.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202402210534.siGKEfus-lkp@xxxxxxxxx/

smatch warnings:
kernel/bpf/syscall.c:3325 bpf_tracing_prog_attach() warn: passing zero to 'PTR_ERR'
kernel/bpf/syscall.c:3485 bpf_tracing_prog_attach() error: uninitialized symbol 'link'.

vim +/PTR_ERR +3325 kernel/bpf/syscall.c

4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3255 static int bpf_tracing_prog_attach(struct bpf_prog *prog,
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3256 int tgt_prog_fd,
2fcc82411e74e5 Kui-Feng Lee 2022-05-10 3257 u32 btf_id,
2fcc82411e74e5 Kui-Feng Lee 2022-05-10 3258 u64 bpf_cookie)
fec56f5890d93f Alexei Starovoitov 2019-11-14 3259 {
a3b80e1078943d Andrii Nakryiko 2020-04-28 3260 struct bpf_link_primer link_primer;
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3261 struct bpf_prog *tgt_prog = NULL;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3262 struct bpf_trampoline *tr = NULL;
5f80eb32851d7a Menglong Dong 2024-02-20 3263 struct btf *attach_btf = NULL;
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3264 struct bpf_tracing_link *link;
5f80eb32851d7a Menglong Dong 2024-02-20 3265 struct module *mod = NULL;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3266 u64 key = 0;
a3b80e1078943d Andrii Nakryiko 2020-04-28 3267 int err;
fec56f5890d93f Alexei Starovoitov 2019-11-14 3268
9e4e01dfd3254c KP Singh 2020-03-29 3269 switch (prog->type) {
9e4e01dfd3254c KP Singh 2020-03-29 3270 case BPF_PROG_TYPE_TRACING:
fec56f5890d93f Alexei Starovoitov 2019-11-14 3271 if (prog->expected_attach_type != BPF_TRACE_FENTRY &&
be8704ff07d237 Alexei Starovoitov 2020-01-20 3272 prog->expected_attach_type != BPF_TRACE_FEXIT &&
9e4e01dfd3254c KP Singh 2020-03-29 3273 prog->expected_attach_type != BPF_MODIFY_RETURN) {
9e4e01dfd3254c KP Singh 2020-03-29 3274 err = -EINVAL;
9e4e01dfd3254c KP Singh 2020-03-29 3275 goto out_put_prog;
9e4e01dfd3254c KP Singh 2020-03-29 3276 }
9e4e01dfd3254c KP Singh 2020-03-29 3277 break;
9e4e01dfd3254c KP Singh 2020-03-29 3278 case BPF_PROG_TYPE_EXT:
9e4e01dfd3254c KP Singh 2020-03-29 3279 if (prog->expected_attach_type != 0) {
9e4e01dfd3254c KP Singh 2020-03-29 3280 err = -EINVAL;
9e4e01dfd3254c KP Singh 2020-03-29 3281 goto out_put_prog;
9e4e01dfd3254c KP Singh 2020-03-29 3282 }
9e4e01dfd3254c KP Singh 2020-03-29 3283 break;
9e4e01dfd3254c KP Singh 2020-03-29 3284 case BPF_PROG_TYPE_LSM:
9e4e01dfd3254c KP Singh 2020-03-29 3285 if (prog->expected_attach_type != BPF_LSM_MAC) {
9e4e01dfd3254c KP Singh 2020-03-29 3286 err = -EINVAL;
9e4e01dfd3254c KP Singh 2020-03-29 3287 goto out_put_prog;
9e4e01dfd3254c KP Singh 2020-03-29 3288 }
9e4e01dfd3254c KP Singh 2020-03-29 3289 break;
9e4e01dfd3254c KP Singh 2020-03-29 3290 default:
fec56f5890d93f Alexei Starovoitov 2019-11-14 3291 err = -EINVAL;
fec56f5890d93f Alexei Starovoitov 2019-11-14 3292 goto out_put_prog;
fec56f5890d93f Alexei Starovoitov 2019-11-14 3293 }
fec56f5890d93f Alexei Starovoitov 2019-11-14 3294
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3295 if (tgt_prog_fd) {
5f80eb32851d7a Menglong Dong 2024-02-20 3296 if (!btf_id) {
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3297 err = -EINVAL;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3298 goto out_put_prog;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3299 }
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3300 tgt_prog = bpf_prog_get(tgt_prog_fd);
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3301 if (IS_ERR(tgt_prog)) {
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3302 tgt_prog = NULL;
5f80eb32851d7a Menglong Dong 2024-02-20 3303 /* tgt_prog_fd is the fd of the kernel module BTF */
5f80eb32851d7a Menglong Dong 2024-02-20 3304 attach_btf = btf_get_by_fd(tgt_prog_fd);
5f80eb32851d7a Menglong Dong 2024-02-20 3305 if (IS_ERR(attach_btf)) {
5f80eb32851d7a Menglong Dong 2024-02-20 3306 attach_btf = NULL;
5f80eb32851d7a Menglong Dong 2024-02-20 3307 err = -EINVAL;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3308 goto out_put_prog;
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3309 }
5f80eb32851d7a Menglong Dong 2024-02-20 3310 if (!btf_is_kernel(attach_btf)) {
5f80eb32851d7a Menglong Dong 2024-02-20 3311 btf_put(attach_btf);
5f80eb32851d7a Menglong Dong 2024-02-20 3312 err = -EOPNOTSUPP;
5f80eb32851d7a Menglong Dong 2024-02-20 3313 goto out_put_prog;
5f80eb32851d7a Menglong Dong 2024-02-20 3314 }
5f80eb32851d7a Menglong Dong 2024-02-20 3315 } else if (prog->type == BPF_PROG_TYPE_TRACING &&
5f80eb32851d7a Menglong Dong 2024-02-20 3316 tgt_prog->type == BPF_PROG_TYPE_TRACING) {
5f80eb32851d7a Menglong Dong 2024-02-20 3317 prog->aux->attach_tracing_prog = true;
5f80eb32851d7a Menglong Dong 2024-02-20 3318 }
5f80eb32851d7a Menglong Dong 2024-02-20 3319 key = bpf_trampoline_compute_key(tgt_prog, attach_btf,
5f80eb32851d7a Menglong Dong 2024-02-20 3320 btf_id);
5f80eb32851d7a Menglong Dong 2024-02-20 3321 } else if (btf_id) {
5f80eb32851d7a Menglong Dong 2024-02-20 3322 attach_btf = bpf_get_btf_vmlinux();
5f80eb32851d7a Menglong Dong 2024-02-20 3323 if (IS_ERR(attach_btf)) {
5f80eb32851d7a Menglong Dong 2024-02-20 3324 attach_btf = NULL;
^^^^^^^^^^^^^^^^^^
This needs to be done after the "err = " assignment on the next line.

5f80eb32851d7a Menglong Dong 2024-02-20 @3325 err = PTR_ERR(attach_btf);
^^^^^^^^^^^^^^^^^^^^^^^^^^
Here.

5f80eb32851d7a Menglong Dong 2024-02-20 3326 goto out_unlock;
5f80eb32851d7a Menglong Dong 2024-02-20 3327 }
5f80eb32851d7a Menglong Dong 2024-02-20 3328 if (!attach_btf) {
5f80eb32851d7a Menglong Dong 2024-02-20 3329 err = -EINVAL;
5f80eb32851d7a Menglong Dong 2024-02-20 3330 goto out_unlock;

"link" is not initialized on this goto path so it leads to an
uninitialized variable warning.

5f80eb32851d7a Menglong Dong 2024-02-20 3331 }
5f80eb32851d7a Menglong Dong 2024-02-20 3332 btf_get(attach_btf);
5f80eb32851d7a Menglong Dong 2024-02-20 3333 key = bpf_trampoline_compute_key(NULL, attach_btf, btf_id);
5f80eb32851d7a Menglong Dong 2024-02-20 3334 } else {
5f80eb32851d7a Menglong Dong 2024-02-20 3335 attach_btf = prog->aux->attach_btf;
5f80eb32851d7a Menglong Dong 2024-02-20 3336 /* get the reference of the btf for bpf link */
5f80eb32851d7a Menglong Dong 2024-02-20 3337 if (attach_btf)
5f80eb32851d7a Menglong Dong 2024-02-20 3338 btf_get(attach_btf);
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3339 }
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3340
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3341 link = kzalloc(sizeof(*link), GFP_USER);
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3342 if (!link) {
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3343 err = -ENOMEM;
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3344 goto out_put_prog;
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3345 }
f7e0beaf39d386 Kui-Feng Lee 2022-05-10 3346 bpf_link_init(&link->link.link, BPF_LINK_TYPE_TRACING,
f2e10bff16a0fd Andrii Nakryiko 2020-04-28 3347 &bpf_tracing_link_lops, prog);
f2e10bff16a0fd Andrii Nakryiko 2020-04-28 3348 link->attach_type = prog->expected_attach_type;
2fcc82411e74e5 Kui-Feng Lee 2022-05-10 3349 link->link.cookie = bpf_cookie;
70ed506c3bbcfa Andrii Nakryiko 2020-03-02 3350

[ snip ]

3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3474 prog->aux->dst_trampoline = NULL;
5f80eb32851d7a Menglong Dong 2024-02-20 3475 prog->aux->mod = NULL;
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3476 mutex_unlock(&prog->aux->dst_mutex);
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3477
a3b80e1078943d Andrii Nakryiko 2020-04-28 3478 return bpf_link_settle(&link_primer);
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3479 out_unlock:
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3480 if (tr && tr != prog->aux->dst_trampoline)
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3481 bpf_trampoline_put(tr);
5f80eb32851d7a Menglong Dong 2024-02-20 3482 if (mod && mod != prog->aux->mod)
5f80eb32851d7a Menglong Dong 2024-02-20 3483 module_put(mod);
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 3484 mutex_unlock(&prog->aux->dst_mutex);
3aac1ead5eb6b7 Toke Høiland-Jørgensen 2020-09-29 @3485 kfree(link);
^^^^

fec56f5890d93f Alexei Starovoitov 2019-11-14 3486 out_put_prog:
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3487 if (tgt_prog_fd && tgt_prog)
4a1e7c0c63e02d Toke Høiland-Jørgensen 2020-09-29 3488 bpf_prog_put(tgt_prog);
5f80eb32851d7a Menglong Dong 2024-02-20 3489 btf_put(attach_btf);
fec56f5890d93f Alexei Starovoitov 2019-11-14 3490 return err;
fec56f5890d93f Alexei Starovoitov 2019-11-14 3491 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki