1/* 2 * Functions which are too large to be inlined. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9#include <linux/module.h> 10#include <asm/uaccess.h> 11 12unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) 13{ 14 if (likely(access_ok(VERIFY_READ, from, n))) 15 n = __copy_from_user(to, from, n); 16 else 17 memset(to, 0, n); 18 return n; 19} 20 21unsigned long copy_to_user(void __user *to, const void *from, unsigned long n) 22{ 23 if (likely(access_ok(VERIFY_WRITE, to, n))) 24 n = __copy_to_user(to, from, n); 25 return n; 26} 27 28unsigned long copy_in_user(void __user *to, const void __user *from, 29 unsigned long n) 30{ 31 might_sleep(); 32 if (likely(access_ok(VERIFY_READ, from, n) && 33 access_ok(VERIFY_WRITE, to, n))) 34 n =__copy_tofrom_user(to, from, n); 35 return n; 36} 37 38EXPORT_SYMBOL(copy_from_user); 39EXPORT_SYMBOL(copy_to_user); 40EXPORT_SYMBOL(copy_in_user); 41