The native 31 bit and the compat behaviour for the mmap system calls differ:
In native 31 bit mode the passed in address for the mmap system call will be
unmodified passed to sys_mmap_pgoff().
In compat mode however the passed in address will be modified with
compat_ptr() which masks out the most significant bit.
The result is that in native 31 bit mode each mmap request (with MAP_FIXED)
will fail where the most significat bit is set, while in compat mode it
may succeed.
This odd behaviour was introduced with
|
||
|---|---|---|
| .. | ||
| vdso32 | ||
| vdso64 | ||
| .gitignore | ||
| asm-offsets.c | ||
| audit.c | ||
| audit.h | ||
| base.S | ||
| bitmap.c | ||
| compat_audit.c | ||
| compat_exec_domain.c | ||
| compat_linux.c | ||
| compat_linux.h | ||
| compat_ptrace.h | ||
| compat_signal.c | ||
| compat_wrapper.S | ||
| cpcmd.c | ||
| crash.c | ||
| crash_dump.c | ||
| debug.c | ||
| diag.c | ||
| dis.c | ||
| early.c | ||
| ebcdic.c | ||
| entry.h | ||
| entry.S | ||
| entry64.S | ||
| ftrace.c | ||
| head.S | ||
| head31.S | ||
| head64.S | ||
| head_kdump.S | ||
| ipl.c | ||
| irq.c | ||
| jump_label.c | ||
| kprobes.c | ||
| lgr.c | ||
| machine_kexec.c | ||
| Makefile | ||
| mcount.S | ||
| mcount64.S | ||
| mem_detect.c | ||
| module.c | ||
| nmi.c | ||
| os_info.c | ||
| perf_cpum_cf.c | ||
| perf_event.c | ||
| process.c | ||
| processor.c | ||
| ptrace.c | ||
| reipl.S | ||
| reipl64.S | ||
| relocate_kernel.S | ||
| relocate_kernel64.S | ||
| s390_ksyms.c | ||
| sclp.S | ||
| setup.c | ||
| signal.c | ||
| smp.c | ||
| stacktrace.c | ||
| suspend.c | ||
| swsusp_asm64.S | ||
| sys_s390.c | ||
| syscalls.S | ||
| sysinfo.c | ||
| time.c | ||
| topology.c | ||
| traps.c | ||
| vdso.c | ||
| vmlinux.lds.S | ||
| vtime.c | ||