make PROT_WRITE imply PROT_READ

From: Jason Baron
Date: Thu Jun 22 2006 - 13:38:20 EST




Hi,

Currently, if i mmap() a file PROT_WRITE only and then first read from it
and then write to it, i get a SEGV. However, if i write to it first and
then read from it, i get no SEGV. This seems rather inconsistent.

The current implementation seems to be to make PROT_WRITE imply PROT_READ,
however it does not quite work correctly. The patch below resolves this
issue, by explicitly setting the PROT_READ flag when PROT_WRITE is
requested.

This might appear at first as a possible permissions subversion, as i
could get PROT_READ on a file that i only have write permission
to...however, the mmap implementation requires that the file be opened
with at least read access already. Thus, i don't believe there is any
issue with regards to permissions.

Another consequenece of this patch is that it forces PROT_READ even for
architectures that might be able to support it, (I know that x86, x86_64
and ia64 do not) but i think this is best for portability.

This was originally reported by Doug Chapman.

thanks,

-Jason


Signed-off-by: Jason Baron <jbaron@xxxxxxxxxx>

--- linux-2.6/mm/mmap.c.bak 2006-06-21 17:07:52.000000000 -0400
+++ linux-2.6/mm/mmap.c 2006-06-21 17:22:54.000000000 -0400
@@ -910,6 +910,13 @@
if (!(file && (file->f_vfsmnt->mnt_flags & MNT_NOEXEC)))
prot |= PROT_EXEC;

+ /* SuSv3: "if the application requests only PROT_WRITE, the
+ * implementation may also allow read access."
+ */
+
+ if (prot & PROT_WRITE)
+ prot |= PROT_READ;
+
if (!len)
return -EINVAL;

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