darwin afscall syscall should set retval
authorDerrick Brashear <shadow@dementia.org>
Wed, 24 Feb 2010 05:30:28 +0000 (00:30 -0500)
committerDerrick Brashear <shadow@dementia.org>
Thu, 25 Feb 2010 21:55:40 +0000 (13:55 -0800)
because of how the ioctl based syscall works, passing back a real
return value should be done this way, as it is for the other other
afs syscall subcalls. matters for userspace handlers.

Change-Id: I894b4bd633ce4823b1ce906861251fcbb3949af2
Reviewed-on: http://gerrit.openafs.org/1381
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/afs/afs_syscall.c

index 0bdfdf9..0486d6e 100644 (file)
@@ -638,6 +638,11 @@ Afs_syscall()
            code =
                afs_syscall64_call(uap64->parm1, uap64->parm2, uap64->parm3,
                                   uap64->parm4, uap64->parm5, uap64->parm6);
+           /* pass back the code as syscall retval */
+           if (code < 0) {
+               *retval = code;
+               code = 0;
+           }
        } else if (uap64->syscall == AFSCALL_SETPAG) {
            AFS_GLOCK();
            code = afs_setpag(p, args, retval);
@@ -676,6 +681,13 @@ Afs_syscall()
            code =
                afs_syscall_call(uap->parm1, uap->parm2, uap->parm3,
                                 uap->parm4, uap->parm5, uap->parm6);
+#ifdef AFS_DARWIN_ENV
+           /* pass back the code as syscall retval */
+           if (code < 0) {
+               *retval = code;
+               code = 0;
+           }
+#endif
        } else if (uap->syscall == AFSCALL_SETPAG) {
 #ifdef AFS_SUN5_ENV
            register proc_t *procp;