From: "David S. Miller" <davem@redhat.com>

COMPAT layer bug fixes:

1) Compat layer statfs64 syscalls were missing 'sz' argument.

2) SPARC64 was not using the compat entry points, oops.



 arch/sparc64/kernel/systbls.S |    4 ++--
 fs/compat.c                   |   11 ++++++++---
 2 files changed, 10 insertions(+), 5 deletions(-)

diff -puN arch/sparc64/kernel/systbls.S~compat-statfs-fixes arch/sparc64/kernel/systbls.S
--- 25/arch/sparc64/kernel/systbls.S~compat-statfs-fixes	2003-11-18 22:16:05.000000000 -0800
+++ 25-akpm/arch/sparc64/kernel/systbls.S	2003-11-18 22:16:05.000000000 -0800
@@ -65,8 +65,8 @@ sys_call_table32:
 	.word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex
 /*220*/	.word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid
 	.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
-/*230*/	.word sys32_select, sys_time, sys_nis_syscall, sys_stime, sys_statfs64
-	.word sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
+/*230*/	.word sys32_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64
+	.word compat_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
 /*240*/	.word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
 	.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
 /*250*/	.word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl
diff -puN fs/compat.c~compat-statfs-fixes fs/compat.c
--- 25/fs/compat.c~compat-statfs-fixes	2003-11-18 22:16:05.000000000 -0800
+++ 25-akpm/fs/compat.c	2003-11-18 22:16:05.000000000 -0800
@@ -169,7 +169,6 @@ out:
 
 static int put_compat_statfs64(struct compat_statfs64 *ubuf, struct kstatfs *kbuf)
 {
-	
 	if (sizeof ubuf->f_blocks == 4) {
 		if ((kbuf->f_blocks | kbuf->f_bfree |
 		     kbuf->f_bavail | kbuf->f_files | kbuf->f_ffree) &
@@ -192,11 +191,14 @@ static int put_compat_statfs64(struct co
 	return 0;
 }
 
-asmlinkage long compat_statfs64(const char *path, struct compat_statfs64 *buf)
+asmlinkage long compat_statfs64(const char *path, compat_size_t sz, struct compat_statfs64 *buf)
 {
 	struct nameidata nd;
 	int error;
 
+	if (sz != sizeof(*buf))
+		return -EINVAL;
+
 	error = user_path_walk(path, &nd);
 	if (!error) {
 		struct kstatfs tmp;
@@ -208,12 +210,15 @@ asmlinkage long compat_statfs64(const ch
 	return error;
 }
 
-asmlinkage long compat_fstatfs64(unsigned int fd, struct compat_statfs64 *buf)
+asmlinkage long compat_fstatfs64(unsigned int fd, compat_size_t sz, struct compat_statfs64 *buf)
 {
 	struct file * file;
 	struct kstatfs tmp;
 	int error;
 
+	if (sz != sizeof(*buf))
+		return -EINVAL;
+
 	error = -EBADF;
 	file = fget(fd);
 	if (!file)

_