For old mmap syscall, when executing on amd64 or ia64, enforce the
PROT_EXEC if prot is non-zero, process is 32bit and kern.elf32.i386_read_exec syscal is enabled. This workaround is needed for old i386 a.out binaries, where dynamic linker did not specified PROT_EXEC for mapping of the text. The kern.elf32.i386_read_exec MIB name looks weird for a.out binaries, but I reused the existing knob which already has the needed semantic. MFC after: 1 week
This commit is contained in:
parent
a8d4becf02
commit
ee4116b8f7
@ -453,6 +453,13 @@ ommap(td, uap)
|
||||
nargs.addr = uap->addr;
|
||||
nargs.len = uap->len;
|
||||
nargs.prot = cvtbsdprot[uap->prot & 0x7];
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
#if defined(__amd64__) || defined(__ia64__)
|
||||
if (i386_read_exec && SV_PROC_FLAG(td->td_proc, SV_ILP32) &&
|
||||
nargs.prot != 0)
|
||||
nargs.prot |= PROT_EXEC;
|
||||
#endif
|
||||
#endif
|
||||
nargs.flags = 0;
|
||||
if (uap->flags & OMAP_ANON)
|
||||
nargs.flags |= MAP_ANON;
|
||||
|
Loading…
x
Reference in New Issue
Block a user