• Tim Bird's avatar
    ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve · e787ec13
    Tim Bird authored
    The inline assembly in kernel_execve() uses r8 and r9.  Since this
    code sequence does not return, it usually doesn't matter if the
    register clobber list is accurate.  However, I saw a case where a
    particular version of gcc used r8 as an intermediate for the value
    eventually passed to r9.  Because r8 is used in the inline
    assembly, and not mentioned in the clobber list, r9 was set
    to an incorrect value.
    
    This resulted in a kernel panic on execution of the first user-space
    program in the system.  r9 is used in ret_to_user as the thread_info
    pointer, and if it's wrong, bad things happen.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTim Bird <tim.bird@am.sony.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    e787ec13
sys_arm.c 3.39 KB