@@ -217,28 +217,36 @@ ENTRY(__kernel_clock_getres)
ccmp w0, #CLOCK_MONOTONIC, #0x4, ne
b.ne 1f
- ldr x2, 5f
+ ldr x2, 6f
b 2f
1:
cmp w0, #CLOCK_REALTIME_COARSE
ccmp w0, #CLOCK_MONOTONIC_COARSE, #0x4, ne
- b.ne 4f
- ldr x2, 6f
+ b.ne 5f
+ ldr x2, 7f
2:
cbz w1, 3f
+ RANGE_OK(1, #TSPEC_SZ)
+ cbz x4, 4f
stp xzr, x2, [x1]
+ mov w0, wzr
+ ret
3: /* res == NULL. */
- mov w0, wzr
+ mov x0, #-EINVAL
ret
-4: /* Syscall fallback. */
+4: /* res is invalid. */
+ mov x0, #-EFAULT
+ ret
+
+5: /* Syscall fallback. */
mov x8, #__NR_clock_getres
svc #0
ret
-5:
- .quad CLOCK_REALTIME_RES
6:
+ .quad CLOCK_REALTIME_RES
+7:
.quad CLOCK_COARSE_RES
.cfi_endproc
ENDPROC(__kernel_clock_getres)
Use RANGE_OK to check whether the res pointer is valid. Returns -EINVAL if the it's NULL, returns -EFAULT if it's invalid, otherwise return 0. Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- arch/arm64/kernel/vdso/gettimeofday.S | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)