Old (a.out) rtld attempts to mmap zero-length region, e.g. when bss

of the linked object is zero-length. More old code assumes that mmap
of zero length returns success.

For a.out and pre-8 ELF binaries, allow the mmap of zero length.

Reported by:	tegge
Reviewed by:	tegge, alc, jhb
MFC after:	3 days
This commit is contained in:
Konstantin Belousov 2009-09-20 12:40:56 +00:00
parent 4b6492f5ab
commit 497a82382b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=197348

View File

@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mount.h>
#include <sys/conf.h>
#include <sys/stat.h>
#include <sys/sysent.h>
#include <sys/vmmeter.h>
#include <sys/sysctl.h>
@ -229,7 +230,8 @@ mmap(td, uap)
fp = NULL;
/* make sure mapping fits into numeric range etc */
if (uap->len == 0 ||
if ((uap->len == 0 && !SV_CURPROC_FLAG(SV_AOUT) &&
curproc->p_osrel >= 800104) ||
((flags & MAP_ANON) && uap->fd != -1))
return (EINVAL);