return MAP_FAILED;
}
-# 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, ((__u_long) offset >> MMAP2_PAGE_SHIFT));
-# endif
+ /*
+ * We know __off64_t is always a signed 64-bit type, but need things
+ * to be unsigned before doing the shift. If it isn't, we might
+ * sign extend things and pass in the wrong value. So cast it to
+ * an unsigned 64-bit value before doing the shift.
+ */
+ return __syscall_mmap2(addr, len, prot, flags, fd,
+ ((uint64_t)offset >> MMAP2_PAGE_SHIFT));
}
# endif