From 22a4424b0b32a898950b917af834967c2672fb9e Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 15 May 2007 00:37:02 +0000 Subject: Fix arm mmap when using mmap2 syscall. Fixes bug #1303 --- libc/sysdeps/linux/arm/mmap.c | 11 +++++++++-- libc/sysdeps/linux/common/mmap64.c | 9 +++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'libc') diff --git a/libc/sysdeps/linux/arm/mmap.c b/libc/sysdeps/linux/arm/mmap.c index 2eea38efc..63f76d7db 100644 --- a/libc/sysdeps/linux/arm/mmap.c +++ b/libc/sysdeps/linux/arm/mmap.c @@ -27,7 +27,6 @@ __ptr_t mmap(__ptr_t addr, size_t len, int prot, #elif defined (__NR_mmap2) #define __NR__mmap __NR_mmap2 - #ifndef MMAP2_PAGE_SHIFT # define MMAP2_PAGE_SHIFT 12 #endif @@ -39,9 +38,17 @@ __ptr_t mmap(__ptr_t addr, size_t len, int prot, { /* check if offset is page aligned */ if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) + { + __set_errno(EINVAL); return MAP_FAILED; + } +#ifdef __USE_FILE_OFFSET64 + return (__ptr_t) _mmap (addr, len, prot, flags, + fd,((__u_quad_t) offset >> MMAP2_PAGE_SHIFT)); +#else return (__ptr_t) _mmap (addr, len, prot, flags, - fd,(off_t) (offset >> MMAP2_PAGE_SHIFT)); + fd,((__u_long) offset >> MMAP2_PAGE_SHIFT)); +#endif } #elif defined (__NR_mmap) # define __NR__mmap __NR_mmap diff --git a/libc/sysdeps/linux/common/mmap64.c b/libc/sysdeps/linux/common/mmap64.c index 2cf200dc9..85b0a6f17 100644 --- a/libc/sysdeps/linux/common/mmap64.c +++ b/libc/sysdeps/linux/common/mmap64.c @@ -58,8 +58,13 @@ __ptr_t mmap64(__ptr_t addr, size_t len, int prot, int flags, int fd, __off64_t __set_errno(EINVAL); return MAP_FAILED; } - - return __syscall_mmap2(addr, len, prot, flags, fd, (off_t) (offset >> MMAP2_PAGE_SHIFT)); +#ifdef __USE_FILE_OFFSET64 + return __syscall_mmap2(addr, len, prot, flags, + fd,((__u_quad_t)offset >> MMAP2_PAGE_SHIFT)); +#else + return __syscall_mmap2(addr, len, prot, flags, + fd,((__ulong_t)offset >> MMAP2_PAGE_SHIFT)); +#endif } # endif -- cgit v1.2.3