Patch "virtio_blk: avoid DMA to stack for the sense buffer" has been added to the 4.9-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
virtio_blk: avoid DMA to stack for the sense buffer
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
virtio_blk-avoid-dma-to-stack-for-the-sense-buffer.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a14d749fcebe97ddf6af6db3d1f6ece85c9ddcb9Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Mon, 9 Jan 2017 08:56:23 -0700
Subject: virtio_blk: avoid DMA to stack for the sense buffer
From: Christoph Hellwig <[email protected]>
commit a14d749fcebe97ddf6af6db3d1f6ece85c9ddcb9 upstream.
Most users of BLOCK_PC requests allocate the sense buffer on the stack, so to avoid DMA to the stack copy them to a field in the heap allocated virtblk_req structure. Without that any attempt at SCSI passthrough I/O, including the SG_IO ioctl from userspace will crash the kernel. Note that this includes running tools like hdparm even when the host does not have SCSI passthrough enabled.
--- drivers/block/virtio_blk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/block/virtio_blk.c +3 -1
@@ -56,6 +56,7 @@ struct virtblk_req {struct virtio_blk_outhdr out_hdr;struct virtio_scsi_inhdr in_hdr;u8 status; +u8 sense[SCSI_SENSE_BUFFERSIZE ];struct scatterlist sg[]; };
@@ -102,7 +103,8 @@ static int __virtblk_add_req(struct virt }if (type ==cpu_to_virtio32 (vq->vdev,VIRTIO_BLK_T_SCSI_CMD )) { -sg_init_one (&sense, vbr->req->sense,SCSI_SENSE_BUFFERSIZE ); +memcpy (vbr->sense, vbr->req->sense,SCSI_SENSE_BUFFERSIZE ); +sg_init_one (&sense, vbr->sense,SCSI_SENSE_BUFFERSIZE ); sgs[num_out + num_in++] = &sense;sg_init_one (&inhdr, &vbr->in_hdr,sizeof (vbr->in_hdr)); sgs[num_out + num_in++] = &inhdr;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/nvme-apply-delay_before_chk_rdy-quirk-at-probe-time-too.patch queue-4.9/mm-fix-devm_memremap_pages-crash-use-mem_hotplug_-begin-done.patch queue-4.9/virtio_blk-avoid-dma-to-stack-for-the-sense-buffer.patch