This patch fixes a corner case in sys_mprotect(): 

Case: len is so large that will overflow to 0 after page alignment.
E.g. len=(size_t)(-1), i.e. 0xff...ff.
Expected result: POSIX spec says it should return -ENOMEM.
Current result: len is aligned to 0, then treated the same as len=0 and
return success.

--- linux-2.6.11.3/mm/mprotect.c.orig   2005-03-14 13:40:28.000000000
-0800
+++ linux-2.6.11.3/mm/mprotect.c        2005-03-14 13:42:41.000000000 -0800
@@ -232,14 +232,14 @@ sys_mprotect(unsigned long start, size_t
 
        if (start & ~PAGE_MASK)
                return -EINVAL;
+       if (!len)
+               return 0;
        len = PAGE_ALIGN(len);
        end = start + len;
-       if (end < start)
+       if (end <= start)
                return -ENOMEM;
        if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM))
                return -EINVAL;
-       if (end == start)
-               return 0;
        /*
         * Does the application expect PROT_READ to imply PROT_EXEC:
         */


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to