On 9/1/25 11:09, Dan Carpenter wrote:
Hello Qi Zhang,

Commit 1f7ea1cd6a37 ("ice: Enable FDIR Configure for AVF") from Mar
9, 2021 (linux-next), leads to the following Smatch static checker
warning:

        drivers/net/ethernet/intel/ice/virt/fdir.c:2339 ice_vc_del_fdir_fltr()
        warn: missing error code here? 'kzalloc_noprof()' failed

drivers/net/ethernet/intel/ice/virt/fdir.c
     2311 int ice_vc_del_fdir_fltr(struct ice_vf *vf, u8 *msg)
     2312 {
     2313         struct virtchnl_fdir_del *fltr = (struct virtchnl_fdir_del 
*)msg;
     2314         struct virtchnl_fdir_del *stat = NULL;
     2315         struct virtchnl_fdir_fltr_conf *conf;
     2316         struct ice_vf_fdir *fdir = &vf->fdir;
     2317         enum virtchnl_status_code v_ret;
     2318         struct ice_fdir_fltr *input;
     2319         enum ice_fltr_ptype flow;
     2320         struct device *dev;
     2321         struct ice_pf *pf;
     2322         int is_tun = 0;
     2323         int len = 0;
     2324         int ret;
     2325
     2326         pf = vf->pf;
     2327         dev = ice_pf_to_dev(pf);
     2328         ret = ice_vc_fdir_param_check(vf, fltr->vsi_id);
     2329         if (ret) {
     2330                 v_ret = VIRTCHNL_STATUS_ERR_PARAM;
     2331                 dev_dbg(dev, "Parameter check for VF %d failed\n", 
vf->vf_id);
     2332                 goto err_exit;
     2333         }
     2334
     2335         stat = kzalloc(sizeof(*stat), GFP_KERNEL);
     2336         if (!stat) {
     2337                 v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;

It's not clear if this is deliberate or not.  Maybe we could add a comment?
Here set v_ret.

thank you for the report,
ice_vc_del_fdir_fltr() is only called from general virtchnl processing
handler, which returns void, and only logs errors on info level, there
is nothing to do about the error anyway
in this case failure at kzalloc() call is on ice/kernel side, not on VF
side, so in principle worth mentioning/blaming; but, from return code
(we don't have much variety of those in VC, but for memory alloc failure
there is one) VF side is knowing that error had happened exactly here
in case of FDIR filter DEL operation, so not much value added




     2338                 dev_dbg(dev, "Alloc stat for VF %d failed\n", 
vf->vf_id);
--> 2339                 goto err_exit;
     2340         }
     2341
     2342         len = sizeof(*stat);
     2343
     2344         conf = ice_vc_fdir_lookup_entry(vf, fltr->flow_id);
     2345         if (!conf) {
     2346                 v_ret = VIRTCHNL_STATUS_SUCCESS;
     2347                 stat->status = VIRTCHNL_FDIR_FAILURE_RULE_NONEXIST;
     2348                 dev_dbg(dev, "VF %d: FDIR invalid flow_id:0x%X\n",
     2349                         vf->vf_id, fltr->flow_id);
     2350                 goto err_exit;
     2351         }

[...]

     2393 exit:
     2394         kfree(stat);
     2395
     2396         return ret;
     2397
     2398 err_del_tmr:
     2399         ice_vc_fdir_clear_irq_ctx(vf);
     2400 err_exit:
     2401         ret = ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_DEL_FDIR_FILTER, 
v_ret,
     2402                                     (u8 *)stat, len);

But then "ret" is generally going to be success.

     2403         kfree(stat);
     2404         return ret;
     2405 }

regards,
dan carpenter

Reply via email to