Dan Carpenter
2021-Feb-25 15:10 UTC
[bug report] vdpa: set the virtqueue num during register
Hello Jason Wang,
The patch ddd50f4495d3: "vdpa: set the virtqueue num during register"
from Feb 23, 2021, leads to the following static checker warning:
drivers/vdpa/ifcvf/ifcvf_main.c:433 ifcvf_probe()
warn: risky error pointer math: '__vdpa_alloc_device(dev,
&ifc_vdpa_ops, 2592 + (0), (0)))'
include/linux/vdpa.h
255 #define vdpa_alloc_device(dev_struct, member, parent, config, name) \
256 container_of(__vdpa_alloc_device( \
257 parent, config, \
258 sizeof(dev_struct) + \
259 BUILD_BUG_ON_ZERO(offsetof( \
260 dev_struct, member)), name), \
261 dev_struct, member)
262
The __vdpa_alloc_device() returns an error pointer and if we call
container_of() on then that's a bug... (Unless the container_of() is
known to be a no-op, in which case it's sort of ugly but fine, I guess.
There is one caller where this is the case.).
drivers/vdpa/ifcvf/ifcvf_main.c
432
433 adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa,
434 dev, &ifc_vdpa_ops, NULL);
435 if (adapter == NULL) {
All the other caller check for NULL. :P
436 IFCVF_ERR(pdev, "Failed to allocate vDPA
structure");
437 return -ENOMEM;
438 }
439
440 pci_set_master(pdev);
441 pci_set_drvdata(pdev, adapter);
442
regards,
dan carpenter