Skip to contentSkip to conversation

Patch "sg_write()/bsg_write() is not fit to be called under KERNEL_DS" has been added to the 4.8-stable tree

PATCH [email protected] 1 participant 1 message Jan 6, 2017

Subsystems (5)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

sg_write()/bsg_write() is not fit to be called under KERNEL_DS

to the 4.8-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:
sg_write-bsg_write-is-not-fit-to-be-called-under-kernel_ds.patch
and it can be found in the queue-4.8 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 128394eff343fc6d2f32172f03e24829539c5835 Mon Sep 17 00:00:00 2001

From: Al Viro <[email protected]>
Date: Fri, 16 Dec 2016 13:42:06 -0500
Subject: sg_write()/bsg_write() is not fit to be called under KERNEL_DS

From: Al Viro <[email protected]>

commit 128394eff343fc6d2f32172f03e24829539c5835 upstream.

Both damn things interpret userland pointers embedded into the payload; worse, they are actually traversing those. Leaving aside the bad API design, this is very much _not_ safe to call with KERNEL_DS. Bail out early if that happens.

---
 block/bsg.c       |    3 +++
 drivers/scsi/sg.c |    3 +++
 2 files changed, 6 insertions(+)
block/bsg.c +3 -0
@@ -655,6 +655,9 @@ bsg_write(struct file *file, const char
 
 	dprintk("%s: write %Zd bytes\n", bd->name, count);
 
+	if (unlikely(segment_eq(get_fs(), KERNEL_DS)))
+		return -EINVAL;
+
 	bsg_set_block(bd, file);
 
 	bytes_written = 0;
drivers/scsi/sg.c +3 -0
@@ -592,6 +592,9 @@ sg_write(struct file *filp, const char _
 	sg_io_hdr_t *hp;
 	unsigned char cmnd[SG_MAX_CDB_SIZE];
 
+	if (unlikely(segment_eq(get_fs(), KERNEL_DS)))
+		return -EINVAL;
+
 	if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
 		return -ENXIO;
 	SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,

Patches currently in stable-queue which might be from [email protected] are

queue-4.8/sg_write-bsg_write-is-not-fit-to-be-called-under-kernel_ds.patch queue-4.8/nfs_write_end-fix-handling-of-short-copies.patch