]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Don't feed anything but regular iovec's to blk_rq_map_user_iov
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 7 Dec 2016 00:18:14 +0000 (16:18 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 23 Jan 2017 20:36:58 +0000 (12:36 -0800)
In theory we could map other things, but there's a reason that function
is called "user_iov".  Using anything else (like splice can do) just
confuses it.

Reported-and-tested-by: Johannes Thumshirn <jthumshirn@suse.de>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit a0ac402cfcdc904f9772e1762b3fda112dcc56a0)

Orabug: 25230657
CVE: CVE-2016-9576
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Conflicts:
block/blk-map.c

block/blk-map.c

index da310a1054299720d1b809d4ac3fd27af02b1e19..fd36d3742b94de4e8ec55e2df35f3d826d262330 100644 (file)
@@ -72,6 +72,11 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
        if (!iter || !iter->count)
                return -EINVAL;
 
+       if (!iter_is_iovec(iter)) {
+               rq->bio = NULL;
+               return -EINVAL;
+       }
+
        iov_for_each(iov, i, *iter) {
                unsigned long uaddr = (unsigned long) iov.iov_base;