Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

romfs: fix romfs_get_unmapped_area() argument check

romfs_get_unmapped_area() checks argument `len' without considering
PAGE_ALIGN which will cause do_mmap_pgoff() return -EINVAL error after
commit f67d9b1576c ("nommu: add page_align to mmap").

Fix the check by changing it in same way ramfs_nommu_get_unmapped_area()
was changed in ramfs/file-nommu.c.

Signed-off-by: Bob Liu <lliubbo@gmail.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Acked-by: Greg Ungerer <gerg@snapgear.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Bob Liu and committed by
Linus Torvalds
2b4b2482 8c95aa60

+6 -2
+6 -2
fs/romfs/mmap-nommu.c
··· 27 27 { 28 28 struct inode *inode = file->f_mapping->host; 29 29 struct mtd_info *mtd = inode->i_sb->s_mtd; 30 - unsigned long isize, offset; 30 + unsigned long isize, offset, maxpages, lpages; 31 31 32 32 if (!mtd) 33 33 goto cant_map_directly; 34 34 35 + /* the mapping mustn't extend beyond the EOF */ 36 + lpages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; 35 37 isize = i_size_read(inode); 36 38 offset = pgoff << PAGE_SHIFT; 37 - if (offset > isize || len > isize || offset > isize - len) 39 + 40 + maxpages = (isize + PAGE_SIZE - 1) >> PAGE_SHIFT; 41 + if ((pgoff >= maxpages) || (maxpages - pgoff < lpages)) 38 42 return (unsigned long) -EINVAL; 39 43 40 44 /* we need to call down to the MTD layer to do the actual mapping */