sys_mmap2 offset argument should always be shifted 12, not PAGE_SHIFT
PATCH 1/1 sys_mmap2 offset argument should always be shifted 12, not PAGE_SHIFT
This patch adjusts the offset argument passed into sys_mmap2 to be always shifted 12, even when the native page size isn't 4K. This is what all existing userspace libraries expect.
Signed-off-by H. Peter Anvin <[email protected]>
arch/mips/kernel/linux32.c +4 -0
@@ -106,6 +106,10 @@ sys32_mmap2(unsigned long addr, unsignedunsigned long error; error = -EINVAL ; +if (pgoff & (~PAGE_MASK >>12 )) + goto out; + pgoff >>=PAGE_SHIFT -12 ; +if (!(flags &MAP_ANONYMOUS )) { error = -EBADF ; file =fget (fd);
arch/mips/kernel/syscall.c +4 -1
@@ -162,7 +162,10 @@ asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { -return do_mmap2 (addr, len, prot, flags, fd, pgoff); +if (pgoff & (~PAGE_MASK >>12 )) +return -EINVAL ; + +return do_mmap2 (addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT -12 )); }save_static_function (sys_fork);