aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@cc.helsinki.fi>1993-08-18 09:50:58 -0400
committerNicolas Pitre <nico@cam.org>2007-08-19 14:19:17 -0400
commit9b07f0392c1a3b97f8682a967071bcf8210b4934 (patch)
tree05f9be038fd6b1ebb19d94f559af868d284418f8
parentf1e7ea6f72640d1033eeeb2ff0c4daf9d12256ab (diff)
downloadarchive-9b07f0392c1a3b97f8682a967071bcf8210b4934.tar.gz
Very small patch to 0.99pl12
I hate to put out patches this soon after a release, but there is one potentially major problem in pl12 which is very simple to fix.. I'm including patches: both in plain ascii and as a uuencoded gzip file (it's the same patch - the uuencoded one is in case there is any newsserver that messes up whitespace). The main patch is just the change from __get_free_page(GFP_BUFFER) into get_free_page(GFP_KERNEL), and the two minor patches just add checks that actually enforce the read-only nature of current file mmap'ings so that any program that tries to do a write mapping at least will be told that it won't work. I'd suggest anybody compiling pl12 should add at least the file_table.c patch: thanks to Alexandre Julliard for noticing this one. Linus
-rw-r--r--fs/file_table.c2
-rw-r--r--fs/nfs/mmap.c2
-rw-r--r--mm/mmap.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/fs/file_table.c b/fs/file_table.c
index 8542dd9..df0ae4a 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -45,7 +45,7 @@ void grow_files(void)
struct file * file;
int i;
- file = (struct file*) __get_free_page(GFP_BUFFER);
+ file = (struct file *) get_free_page(GFP_KERNEL);
if (!file)
return;
diff --git a/fs/nfs/mmap.c b/fs/nfs/mmap.c
index e1b13fb..24df306 100644
--- a/fs/nfs/mmap.c
+++ b/fs/nfs/mmap.c
@@ -50,6 +50,8 @@ int nfs_mmap(struct inode * inode, struct file * file,
{
struct vm_area_struct * mpnt;
+ if (prot & PAGE_RW) /* only PAGE_COW or read-only supported now */
+ return -EINVAL;
if (off & (inode->i_sb->s_blocksize - 1))
return -EINVAL;
if (len > high_memory || off > high_memory - len) /* avoid overflow */
diff --git a/mm/mmap.c b/mm/mmap.c
index 60942be..cec3eb2 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -197,6 +197,8 @@ int generic_mmap(struct inode * inode, struct file * file,
extern struct vm_operations_struct file_mmap;
struct buffer_head * bh;
+ if (prot & PAGE_RW) /* only PAGE_COW or read-only supported right now */
+ return -EINVAL;
if (off & (inode->i_sb->s_blocksize - 1))
return -EINVAL;
if (len > high_memory || off > high_memory - len) /* avoid overflow */