linux26-proc-interface-use-long-not-int-20040511
authorJeffrey Hutzelman <jhutz@cmu.edu>
Tue, 11 May 2004 21:36:13 +0000 (21:36 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 11 May 2004 21:36:13 +0000 (21:36 +0000)
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
src/config/afs_args.h
src/sys/afssyscalls.c

index 3501879..f891c19 100644 (file)
@@ -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);
index 6f1a85f..d2c21f3 100644 (file)
@@ -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
index 3716697..43e4992 100644 (file)
@@ -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);