nommu: fix malloc performance by adding uninitialized flag
The NOMMU code currently clears all anonymous mmapped memory. While this is what we want in the default case, all memory allocation from userspace under NOMMU has to go through this interface, including malloc() which is allowed to return uninitialized memory. This can easily be a significant performance penalty. So for constrained embedded systems were security is irrelevant, allow people to avoid clearing memory unnecessarily. This also alters the ELF-FDPIC binfmt such that it obtains uninitialised memory for the brk and stack region. Signed-off-by: Jie Zhang <jie.zhang@analog.com> Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Greg Ungerer <gerg@snapgear.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
5dc37642cb
commit
ea63763959
@@ -1143,9 +1143,6 @@ static int do_mmap_private(struct vm_area_struct *vma,
|
||||
if (ret < rlen)
|
||||
memset(base + ret, 0, rlen - ret);
|
||||
|
||||
} else {
|
||||
/* if it's an anonymous mapping, then just clear it */
|
||||
memset(base, 0, rlen);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1343,6 +1340,11 @@ unsigned long do_mmap_pgoff(struct file *file,
|
||||
goto error_just_free;
|
||||
add_nommu_region(region);
|
||||
|
||||
/* clear anonymous mappings that don't ask for uninitialized data */
|
||||
if (!vma->vm_file && !(flags & MAP_UNINITIALIZED))
|
||||
memset((void *)region->vm_start, 0,
|
||||
region->vm_end - region->vm_start);
|
||||
|
||||
/* okay... we have a mapping; now we have to register it */
|
||||
result = vma->vm_start;
|
||||
|
||||
|
Reference in New Issue
Block a user