diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-02 08:34:06 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-02 08:34:06 -0800 |
commit | 14cc0b55b70e297a4b5411733d58c6cdc2d7f1be (patch) | |
tree | 2aa0fe9d267d5ae1ab1b47a67d31fbbc1dbf928e /fs/open.c | |
parent | 3cfb07743a5bffecba83f0da26444e85c0a9bfbb (diff) | |
parent | 0e803bafbb7d1b8a9031104f1a982a01b45da4c6 (diff) | |
download | lwn-14cc0b55b70e297a4b5411733d58c6cdc2d7f1be.tar.gz lwn-14cc0b55b70e297a4b5411733d58c6cdc2d7f1be.zip |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull signal/compat fixes from Al Viro:
"Fixes for several regressions introduced in the last signal.git pile,
along with fixing bugs in truncate and ftruncate compat (on just about
anything biarch at least one of those two had been done wrong)."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
compat: restore timerfd settime and gettime compat syscalls
[regression] braino in "sparc: convert to ksignal"
fix compat truncate/ftruncate
switch lseek to COMPAT_SYSCALL_DEFINE
lseek() and truncate() on sparc really need sign extension
Diffstat (limited to 'fs/open.c')
-rw-r--r-- | fs/open.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c index 62f907e3bc36..e3441f58d2e1 100644 --- a/fs/open.c +++ b/fs/open.c @@ -30,6 +30,7 @@ #include <linux/fs_struct.h> #include <linux/ima.h> #include <linux/dnotify.h> +#include <linux/compat.h> #include "internal.h" @@ -140,6 +141,13 @@ SYSCALL_DEFINE2(truncate, const char __user *, path, long, length) return do_sys_truncate(path, length); } +#ifdef CONFIG_COMPAT +COMPAT_SYSCALL_DEFINE2(truncate, const char __user *, path, compat_off_t, length) +{ + return do_sys_truncate(path, length); +} +#endif + static long do_sys_ftruncate(unsigned int fd, loff_t length, int small) { struct inode *inode; @@ -195,6 +203,13 @@ SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) return ret; } +#ifdef CONFIG_COMPAT +COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +{ + return do_sys_ftruncate(fd, length, 1); +} +#endif + /* LFS versions of truncate are only needed on 32 bit machines */ #if BITS_PER_LONG == 32 SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length) |