• Ernie Petrides's avatar
    [PATCH] ia64: fixes for semtimedop() ia32-compat handling · 6a1a1239
    Ernie Petrides authored
    Here are two fixes for the ia32-compatibility mode handling
    for the new semtimedop() system call for the ia64 architecture.
    
    The first problem was that treatment of user-mode calls to semtimedop()
    with a NULL 4th (struct timespec *) parameter was inconsistent with the
    behavior of the same executable on i386 and also with a natively compiled
    ia64 binary.  A NULL 4th arg to semtimedop() should result in no timeout
    being used (like a straight semop() call) rather than in an EFAULT error.
    
    The second problem was that a legitimate semtimedop() with a timeout was
    also resulting in an EFAULT because the fetch of the internal timespec
    strucure by sys_semtimedop() from semtimedop32()'s kernel stack was
    treated as an invalid user-data reference.  This requires temporarily
    switching the addressing limit with set_fs(), further requiring that
    appropriate parameter checking by performed prior to the switch.
    
    The const qualifier was removed from the (struct compat_timespec *) arg
    to semtimedop32() so that the call to get_compat_timespec() wouldn't
    generate a compilation warning.
    6a1a1239
sys_ia32.c 78.8 KB