SOURCES (LINUX_2_6): kernel-vmsplice.patch (NEW) - vmsplice securi...

arekm arekm at pld-linux.org
Sun Feb 10 21:55:46 CET 2008


Author: arekm                        Date: Sun Feb 10 20:55:46 2008 GMT
Module: SOURCES                       Tag: LINUX_2_6
---- Log message:
- vmsplice security fixes for 2.6.24

---- Files affected:
SOURCES:
   kernel-vmsplice.patch (NONE -> 1.1.4.2)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/kernel-vmsplice.patch
diff -u /dev/null SOURCES/kernel-vmsplice.patch:1.1.4.2
--- /dev/null	Sun Feb 10 21:55:46 2008
+++ SOURCES/kernel-vmsplice.patch	Sun Feb 10 21:55:41 2008
@@ -0,0 +1,76 @@
+commit 8811930dc74a503415b35c4a79d14fb0b408a361
+Author: Jens Axboe <jens.axboe at oracle.com>
+Date:   Fri Feb 8 08:49:14 2008 -0800
+
+    splice: missing user pointer access verification
+    
+    vmsplice_to_user() must always check the user pointer and length
+    with access_ok() before copying. Likewise, for the slow path of
+    copy_from_user_mmap_sem() we need to check that we may read from
+    the user region.
+    
+    Signed-off-by: Jens Axboe <jens.axboe at oracle.com>
+    Cc: Wojciech Purczynski <cliph at research.coseinc.com>
+    Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+
+diff --git a/fs/splice.c b/fs/splice.c
+index 4ee49e8..14e2262 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -1179,6 +1179,9 @@ static int copy_from_user_mmap_sem(void *dst, const void __user *src, size_t n)
+ {
+ 	int partial;
+ 
++	if (!access_ok(VERIFY_READ, src, n))
++		return -EFAULT;
++
+ 	pagefault_disable();
+ 	partial = __copy_from_user_inatomic(dst, src, n);
+ 	pagefault_enable();
+@@ -1387,6 +1390,11 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *iov,
+ 			break;
+ 		}
+ 
++		if (unlikely(!access_ok(VERIFY_WRITE, base, len))) {
++			error = -EFAULT;
++			break;
++		}
++
+ 		sd.len = 0;
+ 		sd.total_len = len;
+ 		sd.flags = flags;
+commit 712a30e63c8066ed84385b12edbfb804f49cbc44
+Author: Bastian Blank <bastian at waldi.eu.org>
+Date:   Sun Feb 10 16:47:57 2008 +0200
+
+    splice: fix user pointer access in get_iovec_page_array()
+    
+    Commit 8811930dc74a503415b35c4a79d14fb0b408a361 ("splice: missing user
+    pointer access verification") added the proper access_ok() calls to
+    copy_from_user_mmap_sem() which ensures we can copy the struct iovecs
+    from userspace to the kernel.
+    
+    But we also must check whether we can access the actual memory region
+    pointed to by the struct iovec to fix the access checks properly.
+    
+    Signed-off-by: Bastian Blank <waldi at debian.org>
+    Acked-by: Oliver Pinter <oliver.pntr at gmail.com>
+    Cc: Jens Axboe <jens.axboe at oracle.com>
+    Cc: Andrew Morton <akpm at linux-foundation.org>
+    Signed-off-by: Pekka Enberg <penberg at cs.helsinki.fi>
+    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+
+diff --git a/fs/splice.c b/fs/splice.c
+index 14e2262..9b559ee 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -1234,7 +1234,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
+ 		if (unlikely(!len))
+ 			break;
+ 		error = -EFAULT;
+-		if (unlikely(!base))
++		if (!access_ok(VERIFY_READ, base, len))
+ 			break;
+ 
+ 		/*
================================================================


More information about the pld-cvs-commit mailing list