Skip to content

Commit 3f6d078

Browse files
author
Al Viro
committed
fix compat truncate/ftruncate
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 561c673 commit 3f6d078

File tree

11 files changed

+29
-35
lines changed

11 files changed

+29
-35
lines changed

arch/arm64/include/asm/unistd32.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ __SYSCALL(88, sys_reboot)
113113
__SYSCALL(89, sys_ni_syscall) /* 89 was sys_readdir */
114114
__SYSCALL(90, sys_ni_syscall) /* 90 was sys_mmap */
115115
__SYSCALL(91, sys_munmap)
116-
__SYSCALL(92, sys_truncate)
117-
__SYSCALL(93, sys_ftruncate)
116+
__SYSCALL(92, compat_sys_truncate)
117+
__SYSCALL(93, compat_sys_ftruncate)
118118
__SYSCALL(94, sys_fchmod)
119119
__SYSCALL(95, sys_fchown16)
120120
__SYSCALL(96, sys_getpriority)

arch/mips/kernel/scall64-o32.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ sys_call_table:
284284
PTR compat_sys_old_readdir
285285
PTR sys_mips_mmap /* 4090 */
286286
PTR sys_munmap
287-
PTR sys_truncate
288-
PTR sys_ftruncate
287+
PTR compat_sys_truncate
288+
PTR compat_sys_ftruncate
289289
PTR sys_fchmod
290290
PTR sys_fchown /* 4095 */
291291
PTR sys_getpriority

arch/parisc/kernel/syscall_table.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@
165165
ENTRY_SAME(mmap2)
166166
ENTRY_SAME(mmap) /* 90 */
167167
ENTRY_SAME(munmap)
168-
ENTRY_SAME(truncate)
169-
ENTRY_SAME(ftruncate)
168+
ENTRY_COMP(truncate)
169+
ENTRY_COMP(ftruncate)
170170
ENTRY_SAME(fchmod)
171171
ENTRY_SAME(fchown) /* 95 */
172172
ENTRY_SAME(getpriority)

arch/powerpc/kernel/sys_ppc32.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,6 @@ asmlinkage long compat_sys_sendfile64_wrapper(u32 out_fd, u32 in_fd,
146146
(off_t __user *)offset, count);
147147
}
148148

149-
long compat_sys_truncate(const char __user * path, u32 length)
150-
{
151-
/* sign extend length */
152-
return sys_truncate(path, (int)length);
153-
}
154-
155-
long compat_sys_ftruncate(int fd, u32 length)
156-
{
157-
/* sign extend length */
158-
return sys_ftruncate(fd, (int)length);
159-
}
160-
161149
unsigned long compat_sys_mmap2(unsigned long addr, size_t len,
162150
unsigned long prot, unsigned long flags,
163151
unsigned long fd, unsigned long pgoff)

arch/s390/kernel/compat_wrapper.S

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -325,16 +325,6 @@ ENTRY(sys32_munmap_wrapper)
325325
llgfr %r3,%r3 # size_t
326326
jg sys_munmap # branch to system call
327327

328-
ENTRY(sys32_truncate_wrapper)
329-
llgtr %r2,%r2 # const char *
330-
lgfr %r3,%r3 # long
331-
jg sys_truncate # branch to system call
332-
333-
ENTRY(sys32_ftruncate_wrapper)
334-
llgfr %r2,%r2 # unsigned int
335-
llgfr %r3,%r3 # unsigned long
336-
jg sys_ftruncate # branch to system call
337-
338328
ENTRY(sys32_fchmod_wrapper)
339329
llgfr %r2,%r2 # unsigned int
340330
llgfr %r3,%r3 # mode_t

arch/s390/kernel/syscalls.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper)
100100
SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper) /* old readdir syscall */
101101
SYSCALL(sys_old_mmap,sys_old_mmap,old32_mmap_wrapper) /* 90 */
102102
SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper)
103-
SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper)
104-
SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper)
103+
SYSCALL(sys_truncate,sys_truncate,compat_sys_truncate)
104+
SYSCALL(sys_ftruncate,sys_ftruncate,compat_sys_ftruncate)
105105
SYSCALL(sys_fchmod,sys_fchmod,sys32_fchmod_wrapper)
106106
SYSCALL(sys_fchown16,sys_ni_syscall,sys32_fchown16_wrapper) /* 95 old fchown16 syscall*/
107107
SYSCALL(sys_getpriority,sys_getpriority,sys32_getpriority_wrapper)

arch/sparc/kernel/sys32.S

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0)
5252
SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0)
5353
SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5)
5454
SIGN1(sys32_vmsplice, compat_sys_vmsplice, %o0)
55-
SIGN1(sys32_truncate, sys_truncate, %o1)
5655

5756
.globl sys32_mmap2
5857
sys32_mmap2:

arch/sparc/kernel/systbls_64.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ sys_call_table32:
4343
/*110*/ .word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall
4444
.word sys_getgroups, compat_sys_gettimeofday, sys32_getrusage, sys_nis_syscall, sys_getcwd
4545
/*120*/ .word compat_sys_readv, compat_sys_writev, compat_sys_settimeofday, sys_fchown16, sys_fchmod
46-
.word sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, sys32_truncate
47-
/*130*/ .word sys_ftruncate, sys_flock, compat_sys_lstat64, sys_nis_syscall, sys_nis_syscall
46+
.word sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, compat_sys_truncate
47+
/*130*/ .word compat_sys_ftruncate, sys_flock, compat_sys_lstat64, sys_nis_syscall, sys_nis_syscall
4848
.word sys_nis_syscall, sys_mkdir, sys_rmdir, compat_sys_utimes, compat_sys_stat64
4949
/*140*/ .word sys_sendfile64, sys_nis_syscall, sys32_futex, sys_gettid, compat_sys_getrlimit
5050
.word compat_sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write

arch/x86/syscalls/syscall_32.tbl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@
9898
89 i386 readdir sys_old_readdir compat_sys_old_readdir
9999
90 i386 mmap sys_old_mmap sys32_mmap
100100
91 i386 munmap sys_munmap
101-
92 i386 truncate sys_truncate
102-
93 i386 ftruncate sys_ftruncate
101+
92 i386 truncate sys_truncate compat_sys_truncate
102+
93 i386 ftruncate sys_ftruncate compat_sys_ftruncate
103103
94 i386 fchmod sys_fchmod
104104
95 i386 fchown sys_fchown16
105105
96 i386 getpriority sys_getpriority

fs/open.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <linux/fs_struct.h>
3131
#include <linux/ima.h>
3232
#include <linux/dnotify.h>
33+
#include <linux/compat.h>
3334

3435
#include "internal.h"
3536

@@ -140,6 +141,13 @@ SYSCALL_DEFINE2(truncate, const char __user *, path, long, length)
140141
return do_sys_truncate(path, length);
141142
}
142143

144+
#ifdef CONFIG_COMPAT
145+
COMPAT_SYSCALL_DEFINE2(truncate, const char __user *, path, compat_off_t, length)
146+
{
147+
return do_sys_truncate(path, length);
148+
}
149+
#endif
150+
143151
static long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
144152
{
145153
struct inode *inode;
@@ -195,6 +203,13 @@ SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
195203
return ret;
196204
}
197205

206+
#ifdef CONFIG_COMPAT
207+
COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length)
208+
{
209+
return do_sys_ftruncate(fd, length, 1);
210+
}
211+
#endif
212+
198213
/* LFS versions of truncate are only needed on 32 bit machines */
199214
#if BITS_PER_LONG == 32
200215
SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length)

0 commit comments

Comments
 (0)