--- zzzz-none-000/linux-3.10.107/arch/mips/lib/strnlen_user.S 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/arch/mips/lib/strnlen_user.S 2021-11-10 11:53:54.000000000 +0000 @@ -25,22 +25,45 @@ * bytes. There's nothing secret there. On 64-bit accessing beyond * the maximum is a tad hairier ... */ -LEAF(__strnlen_user_asm) +LEAF(__strnlen_kernel_asm) LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? and v0, a0 bnez v0, .Lfault -FEXPORT(__strnlen_user_nocheck_asm) - move v0, a0 - PTR_ADDU a1, a0 # stop pointer -1: beq v0, a1, 1f # limit reached? +FEXPORT(__strnlen_kernel_nocheck_asm) + move v0, a0 + PTR_ADDU a1, a0 # stop pointer +1: beq v0, a1, 2f # limit reached? EX(lb, t0, (v0), .Lfault) - PTR_ADDIU v0, 1 - bnez t0, 1b -1: PTR_SUBU v0, a0 - jr ra - END(__strnlen_user_asm) + PTR_ADDIU v0, 1 + bnez t0, 1b +2: PTR_SUBU v0, a0 + jr ra + END(__strnlen_kernel_asm) + .Lfault: move v0, zero jr ra + + +#ifdef CONFIG_EVA + +LEAF(__strnlen_user_asm) + LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? + and v0, a0 + bnez v0, .Lfault + +FEXPORT(__strnlen_user_nocheck_asm) + move v0, a0 + PTR_ADDU a1, a0 # stop pointer +1: beq v0, a1, 2f # limit reached? + .set eva + EX(lbe, t0, (v0), .Lfault) + PTR_ADDIU v0, 1 + bnez t0, 1b +2: PTR_SUBU v0, a0 + jr ra + END(__strnlen_user_asm) + +#endif