36 lines
1.4 KiB
Diff
36 lines
1.4 KiB
Diff
|
From 569d1423ac2b585b5cb38bee545b5e0ae2bd7f67 Mon Sep 17 00:00:00 2001
|
||
|
From: James Hogan <james.hogan@imgtec.com>
|
||
|
Date: Thu, 17 May 2012 12:42:54 +0100
|
||
|
Subject: [PATCH] mmap()->sys_mmap2: do unsigned shift of offset
|
||
|
|
||
|
Fix the implementation of mmap based on the mmap2 system call, to
|
||
|
construct pgoffset from offset with an unsigned shift rather than a
|
||
|
signed (off_t) shift. The mmap2 test in the testsuite catches this case
|
||
|
by mmap'ing with a large offset (with the sign bit set). The signed
|
||
|
shift repeats the sign bit making the page shift way out of range. This
|
||
|
is already fixed similarly in mmap64().
|
||
|
|
||
|
Signed-off-by: James Hogan <james.hogan@imgtec.com>
|
||
|
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
||
|
---
|
||
|
libc/sysdeps/linux/common/mmap.c | 3 ++-
|
||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/libc/sysdeps/linux/common/mmap.c b/libc/sysdeps/linux/common/mmap.c
|
||
|
index 8995898..d53eabb 100644
|
||
|
--- a/libc/sysdeps/linux/common/mmap.c
|
||
|
+++ b/libc/sysdeps/linux/common/mmap.c
|
||
|
@@ -63,7 +63,8 @@ __ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offs
|
||
|
__set_errno(EINVAL);
|
||
|
return MAP_FAILED;
|
||
|
}
|
||
|
- return __syscall_mmap2(addr, len, prot, flags, fd, offset >> MMAP2_PAGE_SHIFT);
|
||
|
+ return __syscall_mmap2(addr, len, prot, flags,
|
||
|
+ fd, ((__u_long) offset >> MMAP2_PAGE_SHIFT));
|
||
|
}
|
||
|
|
||
|
libc_hidden_def(mmap)
|
||
|
--
|
||
|
1.7.10.4
|
||
|
|