--- zzzz-none-000/linux-3.10.107/arch/mips/lib/strncpy_user.S 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/arch/mips/lib/strncpy_user.S 2021-11-10 11:53:54.000000000 +0000 @@ -28,6 +28,37 @@ * it happens at most some bytes of the exceptions handlers will be copied. */ +LEAF(__strncpy_from_kernel_asm) + LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? + and v0, a1 + bnez v0, .Lfault + +FEXPORT(__strncpy_from_kernel_nocheck_asm) + .set noreorder + move t0, zero + move v1, a1 +1: EX(lbu, v0, (v1), .Lfault) + PTR_ADDIU v1, 1 + R10KCBARRIER(0(ra)) + beqz v0, 2f + sb v0, (a0) + PTR_ADDIU t0, 1 + bne t0, a2, 1b + PTR_ADDIU a0, 1 +2: PTR_ADDU v0, a1, t0 + xor v0, a1 + bltz v0, .Lfault + nop + jr ra # return n + move v0, t0 + END(__strncpy_from_kernel_asm) + +.Lfault: + jr ra + li v0, -EFAULT + +#ifdef CONFIG_EVA + LEAF(__strncpy_from_user_asm) LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? and v0, a1 @@ -37,8 +68,10 @@ .set noreorder move t0, zero move v1, a1 -1: EX(lbu, v0, (v1), .Lfault) - PTR_ADDIU v1, 1 +1: + .set eva + EX(lbue, v0, (v1), .Lfault) + PTR_ADDIU v1, 1 R10KCBARRIER(0(ra)) beqz v0, 2f sb v0, (a0) @@ -50,12 +83,7 @@ bltz v0, .Lfault nop jr ra # return n - move v0, t0 + move v0, t0 END(__strncpy_from_user_asm) -.Lfault: jr ra - li v0, -EFAULT - - .section __ex_table,"a" - PTR 1b, .Lfault - .previous +#endif