• Tejun Heo's avatar
    scx_central: Fix smatch checker warning · 59cfdf3f
    Tejun Heo authored
    ARRAY_ELEM_PTR() is an access macro used to help the BPF verifier not
    confused by offseted memory acceeses by yiedling a valid pointer or NULL in
    a way that's clear to the verifier. As such, the canonical usage involves
    checking NULL return from the macro. Note that in many cases, the NULL
    condition can never happen - they're there just to hint the verifier.
    
    In a bpf_loop in scx_central.bpf.c::central_dispatch(), the NULL check was
    incorrect in that there was another dereference of the pointer in addition
    to the NULL checked access. This worked as the pointer can never be NULL and
    the verifier could tell it would never be NULL in this case.
    
    However, this still looks wrong and trips smatch:
    
      ./tools/sched_ext/scx_central.bpf.c:205 ____central_dispatch()
      error: we previously assumed 'gimme' could be null (see line 201)
    
      ./tools/sched_ext/scx_central.bpf.c
          195
          196                         if (!scx_bpf_dispatch_nr_slots())
          197                                 break;
          198
          199                         /* central's gimme is never set */
          200                         gimme = ARRAY_ELEM_PTR(cpu_gimme_task, cpu, nr_cpu_ids);
          201                         if (gimme && !*gimme)
    				      ^^^^^
      If gimme is NULL
    
          202                                 continue;
          203
          204                         if (dispatch_to_cpu(cpu))
      --> 205                                 *gimme = false;
    
    Fix the NULL check so that there are no derefs if NULL. This doesn't change
    actual behavior.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
    Link: http://lkml.kernel.org/r/<955e1c3c-ace2-4a1d-b246-15b8196038a3@stanley.mountain>
    59cfdf3f
scx_central.bpf.c 10.2 KB