Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[PATCH] x86_64: Bug in new out of line put_user()

The new out of line put_user() assembly on x86_64 changes %rcx without
telling GCC about it causing things like:

http://bugme.osdl.org/show_bug.cgi?id=4515

See to it that %rcx is not changed (made it consistent with get_user()).

Signed-off-by: Alexander Nyberg <alexn@telia.com>
Signed-off-by: ak@suse.de
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Alexander Nyberg and committed by
Linus Torvalds
3a6fd752 6d9c5d94

+20 -11
+2 -2
arch/x86_64/lib/getuser.S
··· 78 78 __get_user_8: 79 79 GET_THREAD_INFO(%r8) 80 80 addq $7,%rcx 81 - jc bad_get_user 81 + jc 40f 82 82 cmpq threadinfo_addr_limit(%r8),%rcx 83 - jae bad_get_user 83 + jae 40f 84 84 subq $7,%rcx 85 85 4: movq (%rcx),%rdx 86 86 xorl %eax,%eax
+18 -9
arch/x86_64/lib/putuser.S
··· 46 46 __put_user_2: 47 47 GET_THREAD_INFO(%r8) 48 48 addq $1,%rcx 49 - jc bad_put_user 49 + jc 20f 50 50 cmpq threadinfo_addr_limit(%r8),%rcx 51 - jae bad_put_user 52 - 2: movw %dx,-1(%rcx) 51 + jae 20f 52 + 2: decq %rcx 53 + movw %dx,(%rcx) 53 54 xorl %eax,%eax 54 55 ret 56 + 20: decq %rcx 57 + jmp bad_put_user 55 58 56 59 .p2align 4 57 60 .globl __put_user_4 58 61 __put_user_4: 59 62 GET_THREAD_INFO(%r8) 60 63 addq $3,%rcx 61 - jc bad_put_user 64 + jc 30f 62 65 cmpq threadinfo_addr_limit(%r8),%rcx 63 - jae bad_put_user 64 - 3: movl %edx,-3(%rcx) 66 + jae 30f 67 + 3: subq $3,%rcx 68 + movl %edx,(%rcx) 65 69 xorl %eax,%eax 66 70 ret 71 + 30: subq $3,%rcx 72 + jmp bad_put_user 67 73 68 74 .p2align 4 69 75 .globl __put_user_8 70 76 __put_user_8: 71 77 GET_THREAD_INFO(%r8) 72 78 addq $7,%rcx 73 - jc bad_put_user 79 + jc 40f 74 80 cmpq threadinfo_addr_limit(%r8),%rcx 75 - jae bad_put_user 76 - 4: movq %rdx,-7(%rcx) 81 + jae 40f 82 + 4: subq $7,%rcx 83 + movq %rdx,(%rcx) 77 84 xorl %eax,%eax 78 85 ret 86 + 40: subq $7,%rcx 87 + jmp bad_put_user 79 88 80 89 bad_put_user: 81 90 movq $(-EFAULT),%rax