unsigned long __clear_user(void __user *mem, unsigned long len) { if (uaccess_kernel()) { memset((__force void*)mem, 0, len); return 0; } return buffer_op((unsigned long) mem, len, 1, clear_chunk, NULL); }
unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n) { if (uaccess_kernel()) { memcpy((__force void *) to, from, n); return 0; } return buffer_op((unsigned long) to, n, 1, copy_chunk_to_user, &from); }
unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n) { if (uaccess_kernel()) { memcpy(to, (__force void*)from, n); return 0; } return buffer_op((unsigned long) from, n, 0, copy_chunk_from_user, &to); }
int clear_user(void __user *mem, int len) { if (segment_eq(get_fs(), KERNEL_DS)) { memset((__force void*)mem, 0, len); return 0; } return access_ok(VERIFY_WRITE, mem, len) ? buffer_op((unsigned long) mem, len, 1, clear_chunk, NULL) : len; }
int copy_to_user(void __user *to, const void *from, int n) { if (segment_eq(get_fs(), KERNEL_DS)) { memcpy((__force void *) to, from, n); return 0; } return access_ok(VERIFY_WRITE, to, n) ? buffer_op((unsigned long) to, n, 1, copy_chunk_to_user, &from) : n; }
int copy_from_user(void *to, const void __user *from, int n) { if (segment_eq(get_fs(), KERNEL_DS)) { memcpy(to, (__force void*)from, n); return 0; } return access_ok(VERIFY_READ, from, n) ? buffer_op((unsigned long) from, n, 0, copy_chunk_from_user, &to): n; }
long __strnlen_user(const void __user *str, long len) { int count = 0, n; if (uaccess_kernel()) return strnlen((__force char*)str, len) + 1; n = buffer_op((unsigned long) str, len, 0, strnlen_chunk, &count); if (n == 0) return count + 1; return 0; }
int strnlen_user(const void __user *str, int len) { int count = 0, n; if (segment_eq(get_fs(), KERNEL_DS)) return strnlen((__force char*)str, len) + 1; n = buffer_op((unsigned long) str, len, 0, strnlen_chunk, &count); if (n == 0) return count + 1; return -EFAULT; }
long __strncpy_from_user(char *dst, const char __user *src, long count) { long n; char *ptr = dst; if (uaccess_kernel()) { strncpy(dst, (__force void *) src, count); return strnlen(dst, count); } n = buffer_op((unsigned long) src, count, 0, strncpy_chunk_from_user, &ptr); if (n != 0) return -EFAULT; return strnlen(dst, count); }
int strncpy_from_user(char *dst, const char __user *src, int count) { int n; char *ptr = dst; if (segment_eq(get_fs(), KERNEL_DS)) { strncpy(dst, (__force void *) src, count); return strnlen(dst, count); } if (!access_ok(VERIFY_READ, src, 1)) return -EFAULT; n = buffer_op((unsigned long) src, count, 0, strncpy_chunk_from_user, &ptr); if (n != 0) return -EFAULT; return strnlen(dst, count); }
int __clear_user(void __user *mem, int len) { return buffer_op((unsigned long) mem, len, 1, clear_chunk, NULL); }