Release 4.12 arch/x86/lib/usercopy_64.c
/*
* User address space access functions.
*
* Copyright 1997 Andi Kleen <ak@muc.de>
* Copyright 1997 Linus Torvalds
* Copyright 2002 Andi Kleen <ak@suse.de>
*/
#include <linux/export.h>
#include <linux/uaccess.h>
/*
* Zero Userspace
*/
unsigned long __clear_user(void __user *addr, unsigned long size)
{
long __d0;
might_fault();
/* no memory constraint because it doesn't change any memory gcc knows
about */
stac();
asm volatile(
" testq %[size8],%[size8]\n"
" jz 4f\n"
"0: movq %[zero],(%[dst])\n"
" addq %[eight],%[dst]\n"
" decl %%ecx ; jnz 0b\n"
"4: movq %[size1],%%rcx\n"
" testl %%ecx,%%ecx\n"
" jz 2f\n"
"1: movb %b[zero],(%[dst])\n"
" incq %[dst]\n"
" decl %%ecx ; jnz 1b\n"
"2:\n"
".section .fixup,\"ax\"\n"
"3: lea 0(%[size1],%[size8],8),%[size8]\n"
" jmp 2b\n"
".previous\n"
_ASM_EXTABLE(0b,3b)
_ASM_EXTABLE(1b,2b)
: [size8] "=&c"(size), [dst] "=&D" (__d0)
: [size1] "r"(size & 7), "[size8]" (size / 8), "[dst]"(addr),
[zero] "r" (0UL), [eight] "r" (8UL));
clac();
return size;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Andi Kleen | 26 | 76.47% | 4 | 57.14% |
H. Peter Anvin | 6 | 17.65% | 1 | 14.29% |
Al Viro | 1 | 2.94% | 1 | 14.29% |
Nicholas Piggin | 1 | 2.94% | 1 | 14.29% |
Total | 34 | 100.00% | 7 | 100.00% |
EXPORT_SYMBOL(__clear_user);
unsigned long clear_user(void __user *to, unsigned long n)
{
if (access_ok(VERIFY_WRITE, to, n))
return __clear_user(to, n);
return n;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Andi Kleen | 36 | 97.30% | 2 | 66.67% |
Al Viro | 1 | 2.70% | 1 | 33.33% |
Total | 37 | 100.00% | 3 | 100.00% |
EXPORT_SYMBOL(clear_user);
/*
* Try to copy last bytes and clear the rest if needed.
* Since protection fault in copy_from/to_user is not a normal situation,
* it is not necessary to optimize tail handling.
*/
__visible unsigned long
copy_user_handle_tail(char *to, char *from, unsigned len)
{
for (; len; --len, to++) {
char c;
if (__get_user_nocheck(c, from++, sizeof(char)))
break;
if (__put_user_nocheck(c, to, sizeof(char)))
break;
}
clac();
return len;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Vitaly Mayatskikh | 61 | 85.92% | 1 | 25.00% |
Linus Torvalds | 6 | 8.45% | 1 | 25.00% |
CQ Tang | 3 | 4.23% | 1 | 25.00% |
Andi Kleen | 1 | 1.41% | 1 | 25.00% |
Total | 71 | 100.00% | 4 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Andi Kleen | 79 | 49.07% | 6 | 42.86% |
Vitaly Mayatskikh | 62 | 38.51% | 1 | 7.14% |
H. Peter Anvin | 6 | 3.73% | 1 | 7.14% |
Linus Torvalds | 6 | 3.73% | 1 | 7.14% |
CQ Tang | 3 | 1.86% | 1 | 7.14% |
Al Viro | 2 | 1.24% | 1 | 7.14% |
Nicholas Piggin | 1 | 0.62% | 1 | 7.14% |
Andrew Lutomirski | 1 | 0.62% | 1 | 7.14% |
Paul Gortmaker | 1 | 0.62% | 1 | 7.14% |
Total | 161 | 100.00% | 14 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.