From: Gustavo A. R. Silva Date: Wed, 19 Jun 2019 19:28:33 +0000 (-0500) Subject: scsi: virtio_scsi: Use struct_size() helper X-Git-Tag: v5.3-rc1~57^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=211f70ff1daa3b3bb877f0f6fa85a42ef50f8341;p=thirdparty%2Fkernel%2Flinux.git scsi: virtio_scsi: Use struct_size() helper One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example: struct virtio_scsi { ... struct virtio_scsi_vq req_vqs[]; }; Make use of the struct_size() helper instead of an open-coded version in order to avoid any potential type mistakes. So, replace the following form: sizeof(*vscsi) + sizeof(vscsi->req_vqs[0]) * num_queues with: struct_size(vscsi, req_vqs, num_queues) This code was detected with the help of Coccinelle. Signed-off-by: Gustavo A. R. Silva Signed-off-by: Michael S. Tsirkin Reviewed-by: Stefan Hajnoczi --- diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c index 13f1b3b9923a8..ed4f79bffc73d 100644 --- a/drivers/scsi/virtio_scsi.c +++ b/drivers/scsi/virtio_scsi.c @@ -795,7 +795,7 @@ static int virtscsi_probe(struct virtio_device *vdev) num_targets = virtscsi_config_get(vdev, max_target) + 1; shost = scsi_host_alloc(&virtscsi_host_template, - sizeof(*vscsi) + sizeof(vscsi->req_vqs[0]) * num_queues); + struct_size(vscsi, req_vqs, num_queues)); if (!shost) return -ENOMEM;