lkml.org 
[lkml]   [2018]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 79/95] MIPS: uaccess: Add micromips clobbers to bzero invocation
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Matt Redfearn <matt.redfearn@mips.com>

    commit b3d7e55c3f886493235bfee08e1e5a4a27cbcce8 upstream.

    The micromips implementation of bzero additionally clobbers registers t7
    & t8. Specify this in the clobbers list when invoking bzero.

    Fixes: 26c5e07d1478 ("MIPS: microMIPS: Optimise 'memset' core library function.")
    Reported-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: <stable@vger.kernel.org> # 3.10+
    Patchwork: https://patchwork.linux-mips.org/patch/19110/
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/mips/include/asm/uaccess.h | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    --- a/arch/mips/include/asm/uaccess.h
    +++ b/arch/mips/include/asm/uaccess.h
    @@ -1257,6 +1257,13 @@ __clear_user(void __user *addr, __kernel
    {
    __kernel_size_t res;

    +#ifdef CONFIG_CPU_MICROMIPS
    +/* micromips memset / bzero also clobbers t7 & t8 */
    +#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$15", "$24", "$31"
    +#else
    +#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"
    +#endif /* CONFIG_CPU_MICROMIPS */
    +
    if (eva_kernel_access()) {
    __asm__ __volatile__(
    "move\t$4, %1\n\t"
    @@ -1266,7 +1273,7 @@ __clear_user(void __user *addr, __kernel
    "move\t%0, $6"
    : "=r" (res)
    : "r" (addr), "r" (size)
    - : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
    + : bzero_clobbers);
    } else {
    might_fault();
    __asm__ __volatile__(
    @@ -1277,7 +1284,7 @@ __clear_user(void __user *addr, __kernel
    "move\t%0, $6"
    : "=r" (res)
    : "r" (addr), "r" (size)
    - : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
    + : bzero_clobbers);
    }

    return res;

    \
     
     \ /
      Last update: 2018-04-22 16:55    [W:4.160 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site