From 6b50d377b0b4ff2af12044c1dc15d37aad864e76 Mon Sep 17 00:00:00 2001 From: Jeffrey Hutzelman Date: Tue, 11 May 2004 21:36:13 +0000 Subject: [PATCH] linux26-proc-interface-use-long-not-int-20040511 FIXES 4462 arguments to sys_call are long, not int ioctl returns -ERROR, not -1 return -EINVAL on ioctls we don't know --- src/afs/LINUX/osi_module.c | 3 ++- src/config/afs_args.h | 10 +++++----- src/sys/afssyscalls.c | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index 3501879bf..f891c197f 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -170,9 +170,10 @@ afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, struct afsprocdata sysargs; + if (cmd != VIOC_SYSCALL) return -EINVAL; if (copy_from_user(&sysargs, (void *)arg, sizeof(struct afsprocdata))) - return -1; + return -EFAULT; return afs_syscall(sysargs.syscall, sysargs.param1, sysargs.param2, sysargs.param3, sysargs.param4); diff --git a/src/config/afs_args.h b/src/config/afs_args.h index 6f1a85f3f..d2c21f370 100644 --- a/src/config/afs_args.h +++ b/src/config/afs_args.h @@ -183,11 +183,11 @@ typedef struct cm_initparams_v1 { #define VIOC_SYSCALL _IOW(VIOC_SYSCALL_TYPE,1,void *) struct afsprocdata { - int param4; - int param3; - int param2; - int param1; - int syscall; + long param4; + long param3; + long param2; + long param1; + long syscall; }; #endif diff --git a/src/sys/afssyscalls.c b/src/sys/afssyscalls.c index 3716697eb..43e4992d4 100644 --- a/src/sys/afssyscalls.c +++ b/src/sys/afssyscalls.c @@ -315,8 +315,8 @@ iwrite(int dev, int inode, int inode_p1, unsigned int offset, char *cbuf, #endif /* AFS_NAMEI_ENV */ #ifdef AFS_LINUX20_ENV -int proc_afs_syscall(int syscall, int param1, int param2, int param3, - int param4, int *rval) { +int proc_afs_syscall(long syscall, long param1, long param2, long param3, + long param4, int *rval) { struct afsprocdata syscall_data; int fd = open(PROC_SYSCALL_FNAME, O_RDWR); @@ -360,7 +360,7 @@ lpioctl(char *path, int cmd, char *cmarg, int follow) int errcode, rval; #ifdef AFS_LINUX20_ENV - rval = proc_afs_syscall(AFSCALL_PIOCTL, (unsigned int)path, cmd, (unsigned int)cmarg, follow, &errcode); + rval = proc_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg, follow, &errcode); if(rval) errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg, follow); -- 2.39.5