Index: sys/arm64/arm64/copyinout.S =================================================================== --- sys/arm64/arm64/copyinout.S +++ sys/arm64/arm64/copyinout.S @@ -52,6 +52,9 @@ */ ENTRY(copyout) cbz x2, 1f + mov x3, (VM_MAXUSER_ADDRESS - VM_MINUSER_ADDRESS) + cmp x2, x3 + b.hi copyio_fault_nopcb add x3, x1, x2 ldr x4, =VM_MAXUSER_ADDRESS cmp x3, x4 @@ -71,6 +74,9 @@ */ ENTRY(copyin) cbz x2, 1f + mov x3, (VM_MAXUSER_ADDRESS - VM_MINUSER_ADDRESS) + cmp x2, x3 + b.hi copyio_fault_nopcb add x3, x0, x2 ldr x4, =VM_MAXUSER_ADDRESS cmp x3, x4 @@ -92,11 +98,11 @@ mov x5, xzr /* count = 0 */ mov w4, #1 /* If zero return faulure */ cbz x2, 3f /* If len == 0 then skip loop */ - ldr x7, =VM_MAXUSER_ADDRESS adr x6, copyio_fault /* Get the handler address */ SET_FAULT_HANDLER(x6, x7) /* Set the handler */ + ldr x7, =VM_MAXUSER_ADDRESS 1: cmp x0, x7 b.cs copyio_fault ldrb w4, [x0], #1 /* Load from uaddr */ Index: sys/arm64/arm64/genassym.c =================================================================== --- sys/arm64/arm64/genassym.c +++ sys/arm64/arm64/genassym.c @@ -39,6 +39,7 @@ ASSYM(KERNBASE, KERNBASE); ASSYM(VM_MAXUSER_ADDRESS, VM_MAXUSER_ADDRESS); +ASSYM(VM_MINUSER_ADDRESS, VM_MINUSER_ADDRESS); ASSYM(TDF_ASTPENDING, TDF_ASTPENDING); ASSYM(TDF_NEEDRESCHED, TDF_NEEDRESCHED);