]> git.baikalelectronics.ru Git - kernel.git/commitdiff
x86: um: vdso: Add '%rcx' and '%r11' to the syscall clobber list
authorAmmar Faizi <ammarfaizi2@gnuweeb.org>
Fri, 23 Dec 2022 17:23:38 +0000 (00:23 +0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:22 +0000 (13:55 +0100)
[ Upstream commit 8f9a3b102d1f58be863621e6813b9f8c46a5bf47 ]

The 'syscall' instruction clobbers '%rcx' and '%r11', but they are not
listed in the inline Assembly that performs the syscall instruction.

No real bug is found. It wasn't buggy by luck because '%rcx' and '%r11'
are caller-saved registers, and not used in the functions, and the
functions are never inlined.

Add them to the clobber list for code correctness.

Fixes: 07717e169e6225855229638f3890b3970fda80d5 ("um: implement a x86_64 vDSO")
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/um/vdso/um_vdso.c

index 2112b8d146688834897dde9595af02ac89d2c327..ff0f3b4b6c45ed567173766b5d370e2c6fc392a0 100644 (file)
@@ -17,8 +17,10 @@ int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts)
 {
        long ret;
 
-       asm("syscall" : "=a" (ret) :
-               "0" (__NR_clock_gettime), "D" (clock), "S" (ts) : "memory");
+       asm("syscall"
+               : "=a" (ret)
+               : "0" (__NR_clock_gettime), "D" (clock), "S" (ts)
+               : "rcx", "r11", "memory");
 
        return ret;
 }
@@ -29,8 +31,10 @@ int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
 {
        long ret;
 
-       asm("syscall" : "=a" (ret) :
-               "0" (__NR_gettimeofday), "D" (tv), "S" (tz) : "memory");
+       asm("syscall"
+               : "=a" (ret)
+               : "0" (__NR_gettimeofday), "D" (tv), "S" (tz)
+               : "rcx", "r11", "memory");
 
        return ret;
 }