]> www.infradead.org Git - users/jedix/linux-maple.git/commit
scsi: sg: mitigate read/write abuse
authorJann Horn <jannh@google.com>
Mon, 25 Jun 2018 14:25:44 +0000 (16:25 +0200)
committerBrian Maly <brian.maly@oracle.com>
Tue, 30 Oct 2018 16:58:33 +0000 (12:58 -0400)
commit3f8d8c799bd1007a9ba1c5bda88a05c14d96f5b1
treebaf5f9a753d3864db285ceb0349195d459c1362d
parentd55a94ea782cd84a1096580d19b009414f58d3df
scsi: sg: mitigate read/write abuse

As Al Viro noted in commit 128394eff343 ("sg_write()/bsg_write() is not fit
to be called under KERNEL_DS"), sg improperly accesses userspace memory
outside the provided buffer, permitting kernel memory corruption via
splice().  But it doesn't just do it on ->write(), also on ->read().

As a band-aid, make sure that the ->read() and ->write() handlers can not
be called in weird contexts (kernel context or credentials different from
file opener), like for ib_safe_file_access().

If someone needs to use these interfaces from different security contexts,
a new interface should be written that goes through the ->ioctl() handler.

I've mostly copypasted ib_safe_file_access() over as sg_safe_file_access()
because I couldn't find a good common header - please tell me if you know a
better way.

[mkp: s/_safe_/_check_/]

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: <stable@vger.kernel.org>
Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Orabug: 28824718
CVE: CVE-2017-13168

Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Signed-off-by: Allen Pais <allen.pais@oracle.com>
(cherry picked from commit 26b5b874aff5659a7e26e5b1997e3df2c41fa7fd)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Conflicts:
drivers/scsi/sg.c

Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/scsi/sg.c