diff options
Diffstat (limited to 'drivers/char/virtio_console.c')
| -rw-r--r-- | drivers/char/virtio_console.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 21085515814f..17084cfcf53e 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -433,8 +433,7 @@ static struct port_buffer *alloc_buf(struct virtio_device *vdev, size_t buf_size  	 * Allocate buffer and the sg list. The sg list array is allocated  	 * directly after the port_buffer struct.  	 */ -	buf = kmalloc(sizeof(*buf) + sizeof(struct scatterlist) * pages, -		      GFP_KERNEL); +	buf = kmalloc(struct_size(buf, sg, pages), GFP_KERNEL);  	if (!buf)  		goto fail; @@ -1892,13 +1891,14 @@ static int init_vqs(struct ports_device *portdev)  	nr_ports = portdev->max_nr_ports;  	nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2; -	vqs = kmalloc(nr_queues * sizeof(struct virtqueue *), GFP_KERNEL); -	io_callbacks = kmalloc(nr_queues * sizeof(vq_callback_t *), GFP_KERNEL); -	io_names = kmalloc(nr_queues * sizeof(char *), GFP_KERNEL); -	portdev->in_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *), -				  GFP_KERNEL); -	portdev->out_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *), -				   GFP_KERNEL); +	vqs = kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL); +	io_callbacks = kmalloc_array(nr_queues, sizeof(vq_callback_t *), +				     GFP_KERNEL); +	io_names = kmalloc_array(nr_queues, sizeof(char *), GFP_KERNEL); +	portdev->in_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *), +					GFP_KERNEL); +	portdev->out_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *), +					 GFP_KERNEL);  	if (!vqs || !io_callbacks || !io_names || !portdev->in_vqs ||  	    !portdev->out_vqs) {  		err = -ENOMEM;  | 
