CC: [email protected]
TO: "Toke Høiland-Jørgensen" <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/toke/linux.git 
bpf-freplace-multi-attach-alt-03
head:   fe7f8edd142a3de3228b655115a0d2adb3d387a2
commit: 25c1d280dd6f82f0b424b065481235b88fc91389 [4/7] bpf: support attaching 
freplace programs to multiple attach points
:::::: branch date: 3 days ago
:::::: commit date: 7 days ago
config: i386-randconfig-m021-20200910 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
kernel/bpf/syscall.c:2670 bpf_tracing_prog_attach() warn: passing a valid 
pointer to 'PTR_ERR'
kernel/bpf/verifier.c:11205 bpf_check_attach_target() error: we previously 
assumed 'tgt_prog' could be null (see line 11077)

# 
https://git.kernel.org/pub/scm/linux/kernel/git/toke/linux.git/commit/?id=25c1d280dd6f82f0b424b065481235b88fc91389
git remote add toke 
https://git.kernel.org/pub/scm/linux/kernel/git/toke/linux.git
git fetch --no-tags toke bpf-freplace-multi-attach-alt-03
git checkout 25c1d280dd6f82f0b424b065481235b88fc91389
vim +/PTR_ERR +2670 kernel/bpf/syscall.c

5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2585  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2586  static int 
bpf_tracing_prog_attach(struct bpf_prog *prog,
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2587                          
           int tgt_prog_fd,
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2588                          
           u32 btf_id)
fec56f5890d93f Alexei Starovoitov     2019-11-14  2589  {
a3b80e1078943d Andrii Nakryiko        2020-04-28  2590          struct 
bpf_link_primer link_primer;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2591          struct bpf_prog 
*tgt_prog = NULL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2592          struct 
bpf_tracing_link *link;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2593          struct 
btf_func_model fmodel;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2594          long addr;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2595          u64 key;
a3b80e1078943d Andrii Nakryiko        2020-04-28  2596          int err;
fec56f5890d93f Alexei Starovoitov     2019-11-14  2597  
9e4e01dfd3254c KP Singh               2020-03-29  2598          switch 
(prog->type) {
9e4e01dfd3254c KP Singh               2020-03-29  2599          case 
BPF_PROG_TYPE_TRACING:
fec56f5890d93f Alexei Starovoitov     2019-11-14  2600                  if 
(prog->expected_attach_type != BPF_TRACE_FENTRY &&
be8704ff07d237 Alexei Starovoitov     2020-01-20  2601                      
prog->expected_attach_type != BPF_TRACE_FEXIT &&
9e4e01dfd3254c KP Singh               2020-03-29  2602                      
prog->expected_attach_type != BPF_MODIFY_RETURN) {
9e4e01dfd3254c KP Singh               2020-03-29  2603                          
err = -EINVAL;
9e4e01dfd3254c KP Singh               2020-03-29  2604                          
goto out_put_prog;
9e4e01dfd3254c KP Singh               2020-03-29  2605                  }
9e4e01dfd3254c KP Singh               2020-03-29  2606                  break;
9e4e01dfd3254c KP Singh               2020-03-29  2607          case 
BPF_PROG_TYPE_EXT:
9e4e01dfd3254c KP Singh               2020-03-29  2608                  if 
(prog->expected_attach_type != 0) {
9e4e01dfd3254c KP Singh               2020-03-29  2609                          
err = -EINVAL;
9e4e01dfd3254c KP Singh               2020-03-29  2610                          
goto out_put_prog;
9e4e01dfd3254c KP Singh               2020-03-29  2611                  }
9e4e01dfd3254c KP Singh               2020-03-29  2612                  break;
9e4e01dfd3254c KP Singh               2020-03-29  2613          case 
BPF_PROG_TYPE_LSM:
9e4e01dfd3254c KP Singh               2020-03-29  2614                  if 
(prog->expected_attach_type != BPF_LSM_MAC) {
9e4e01dfd3254c KP Singh               2020-03-29  2615                          
err = -EINVAL;
9e4e01dfd3254c KP Singh               2020-03-29  2616                          
goto out_put_prog;
9e4e01dfd3254c KP Singh               2020-03-29  2617                  }
9e4e01dfd3254c KP Singh               2020-03-29  2618                  break;
9e4e01dfd3254c KP Singh               2020-03-29  2619          default:
fec56f5890d93f Alexei Starovoitov     2019-11-14  2620                  err = 
-EINVAL;
fec56f5890d93f Alexei Starovoitov     2019-11-14  2621                  goto 
out_put_prog;
fec56f5890d93f Alexei Starovoitov     2019-11-14  2622          }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2623          if 
(tgt_prog_fd) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2624                  /* For 
now we only allow new targets for BPF_PROG_TYPE_EXT */
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2625                  if 
(prog->type != BPF_PROG_TYPE_EXT ||
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2626                      
!btf_id) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2627                          
err = -EINVAL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2628                          
goto out_put_prog;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2629                  }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2630  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2631                  
tgt_prog = bpf_prog_get(tgt_prog_fd);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2632                  if 
(IS_ERR(tgt_prog)) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2633                          
err = PTR_ERR(tgt_prog);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2634                          
tgt_prog = NULL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2635                          
goto out_put_prog;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2636                  }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2637  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2638                  key = 
((u64)tgt_prog->aux->id) << 32 | btf_id;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2639          } else if 
(btf_id) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2640                  err = 
-EINVAL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2641                  goto 
out_put_prog;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2642          }
fec56f5890d93f Alexei Starovoitov     2019-11-14  2643  
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2644          link = 
READ_ONCE(prog->aux->tgt_link);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2645          if (link) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2646                  if 
(tgt_prog && link->trampoline->key != key) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2647                          
link = NULL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2648                  } else {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2649                          
struct bpf_tracing_link *olink;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2650  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2651                          
olink = cmpxchg(&prog->aux->tgt_link, link, NULL);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2652                          
if (olink != link)
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2653                          
        link = NULL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2654                  }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2655          }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2656  
70ed506c3bbcfa Andrii Nakryiko        2020-03-02  2657          if (!link) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2658                  if 
(!tgt_prog) {
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2659                          
err = -ENOENT;
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2660                          
goto out_put_prog;
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2661                  }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2662  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2663                  err = 
bpf_check_attach_target(NULL, prog, tgt_prog, btf_id,
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2664                          
                      &fmodel, &addr, NULL, NULL);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2665                  if (err)
70ed506c3bbcfa Andrii Nakryiko        2020-03-02  2666                          
goto out_put_prog;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2667  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2668                  link = 
bpf_tracing_link_create(prog, tgt_prog);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2669                  if 
(IS_ERR(link)) {
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13 @2670                          
err = PTR_ERR(link);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2671                          
goto out_put_prog;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2672                  }
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2673                  
tgt_prog = NULL;
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2674  
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2675                  err = 
bpf_trampoline_get(key, (void *)addr, &fmodel, &link->trampoline);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2676                  if (err)
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2677                          
goto out_put_link;
70ed506c3bbcfa Andrii Nakryiko        2020-03-02  2678          }
70ed506c3bbcfa Andrii Nakryiko        2020-03-02  2679  
a3b80e1078943d Andrii Nakryiko        2020-04-28  2680          err = 
bpf_link_prime(&link->link, &link_primer);
a3b80e1078943d Andrii Nakryiko        2020-04-28  2681          if (err) {
babf3164095b06 Andrii Nakryiko        2020-03-09  2682                  
kfree(link);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2683                  goto 
out_put_link;
babf3164095b06 Andrii Nakryiko        2020-03-09  2684          }
fec56f5890d93f Alexei Starovoitov     2019-11-14  2685  
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2686          err = 
bpf_trampoline_link_prog(prog, link->trampoline);
babf3164095b06 Andrii Nakryiko        2020-03-09  2687          if (err) {
a3b80e1078943d Andrii Nakryiko        2020-04-28  2688                  
bpf_link_cleanup(&link_primer);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2689                  goto 
out_put_link;
fec56f5890d93f Alexei Starovoitov     2019-11-14  2690          }
babf3164095b06 Andrii Nakryiko        2020-03-09  2691  
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2692          /* at this 
point the link is no longer referenced from struct bpf_prog,
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2693           * so we can 
populate this without introducing a circular reference.
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2694           */
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2695          link->link.prog 
= prog;
5da5357f2868ba Toke Høiland-Jørgensen 2020-09-01  2696  
a3b80e1078943d Andrii Nakryiko        2020-04-28  2697          return 
bpf_link_settle(&link_primer);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2698  out_put_link:
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2699          
bpf_link_put(&link->link);
fec56f5890d93f Alexei Starovoitov     2019-11-14  2700  out_put_prog:
fec56f5890d93f Alexei Starovoitov     2019-11-14  2701          
bpf_prog_put(prog);
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2702          if (tgt_prog)
25c1d280dd6f82 Toke Høiland-Jørgensen 2020-07-13  2703                  
bpf_prog_put(tgt_prog);
fec56f5890d93f Alexei Starovoitov     2019-11-14  2704          return err;
fec56f5890d93f Alexei Starovoitov     2019-11-14  2705  }
fec56f5890d93f Alexei Starovoitov     2019-11-14  2706  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to