Commit 9dab425e authored by Linus Torvalds's avatar Linus Torvalds

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
parent 9636d570
...@@ -45,7 +45,7 @@ void grow_files(void) ...@@ -45,7 +45,7 @@ void grow_files(void)
struct file * file; struct file * file;
int i; int i;
file = (struct file*) __get_free_page(GFP_BUFFER); file = (struct file *) get_free_page(GFP_KERNEL);
if (!file) if (!file)
return; return;
......
...@@ -50,6 +50,8 @@ int nfs_mmap(struct inode * inode, struct file * file, ...@@ -50,6 +50,8 @@ int nfs_mmap(struct inode * inode, struct file * file,
{ {
struct vm_area_struct * mpnt; 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)) if (off & (inode->i_sb->s_blocksize - 1))
return -EINVAL; return -EINVAL;
if (len > high_memory || off > high_memory - len) /* avoid overflow */ if (len > high_memory || off > high_memory - len) /* avoid overflow */
......
...@@ -197,6 +197,8 @@ int generic_mmap(struct inode * inode, struct file * file, ...@@ -197,6 +197,8 @@ int generic_mmap(struct inode * inode, struct file * file,
extern struct vm_operations_struct file_mmap; extern struct vm_operations_struct file_mmap;
struct buffer_head * bh; 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)) if (off & (inode->i_sb->s_blocksize - 1))
return -EINVAL; return -EINVAL;
if (len > high_memory || off > high_memory - len) /* avoid overflow */ if (len > high_memory || off > high_memory - len) /* avoid overflow */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment