• Dmitry V. Levin's avatar
    sparc64: fix incorrect sign extension in sys_sparc64_personality · 525fd5a9
    Dmitry V. Levin authored
    The value returned by sys_personality has type "long int".
    It is saved to a variable of type "int", which is not a problem
    yet because the type of task_struct->pesonality is "unsigned int".
    The problem is the sign extension from "int" to "long int"
    that happens on return from sys_sparc64_personality.
    
    For example, a userspace call personality((unsigned) -EINVAL) will
    result to any subsequent personality call, including absolutely
    harmless read-only personality(0xffffffff) call, failing with
    errno set to EINVAL.
    Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    525fd5a9
sys_sparc_64.c 15.4 KB