romfs: fix nommu map length to keep inside filesystem
Checks introduced in commit4991e7251
("romfs: do not use mtd->get_unmapped_area directly") re-introduce problems fixed in the earlier commit2b4b2482e
("romfs: fix romfs_get_unmapped_area() argument check"). If a flat binary app is located at the end of a romfs, its page aligned length may be outside of the romfs filesystem. The flat binary loader, via nommu do_mmap_pgoff(), page aligns the length it is mmaping. So simple offset+size checks will fail - returning EINVAL. We can truncate the length to keep it inside the romfs filesystem, and that also keeps the call to mtd_get_unmapped_area() happy. Are there any side effects to truncating the size here though? Signed-off-by: Greg Ungerer <gerg@uclinux.org>
This commit is contained in:
Родитель
5143661ff8
Коммит
e4ba4fc2b9
|
@ -49,8 +49,11 @@ static unsigned long romfs_get_unmapped_area(struct file *file,
|
|||
return (unsigned long) -EINVAL;
|
||||
|
||||
offset += ROMFS_I(inode)->i_dataoffset;
|
||||
if (offset > mtd->size - len)
|
||||
if (offset >= mtd->size)
|
||||
return (unsigned long) -EINVAL;
|
||||
/* the mapping mustn't extend beyond the EOF */
|
||||
if ((offset + len) > mtd->size)
|
||||
len = mtd->size - offset;
|
||||
|
||||
ret = mtd_get_unmapped_area(mtd, len, offset, flags);
|
||||
if (ret == -EOPNOTSUPP)
|
||||
|
|
Загрузка…
Ссылка в новой задаче