On Thu, May 12, 2016 at 11:45:53AM +0800, Zhangjian (Bamvor) wrote:Yes. It is my fault. The original thoughts is clear the up 32bit for size_t.
[...]
Hmm, that is indeed tricky. I think COMPAT_SYSCALL_WRAP4 rightfullyIt works if I apply the following patch, I defined the wrong `__TYPE_IS_xxx`
refuses the loff_t argument here, as the common case is that this is
not possible.
yesterday. Should we merge this into ILP32 series or send the compat.h
and syscalls.h individually? The current series of ILP32 is a little bit
long and hard to review.
diff --git a/include/linux/compat.h b/include/linux/compat.h
index ba6ebe0..22a9565 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -747,7 +747,8 @@ asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32,
#ifndef __SC_COMPAT_CAST
#define __SC_COMPAT_CAST(t, a) ({ \
BUILD_BUG_ON((sizeof(t) > 4) && !__TYPE_IS_L(t) && \
- !__TYPE_IS_UL(t) && !__TYPE_IS_PTR(t)); \
+ !__TYPE_IS_UL(t) && !__TYPE_IS_PTR(t) && \
+ !__TYPE_IS_LOFFT(t)); \
I think it's wrong, as loff_t is 64-bit in 32-bit userspace, and this
will clear meaningful data in top halve.