usercopy_64.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
  12. {
  13. if (likely(access_ok(VERIFY_READ, from, n)))
  14. n = __copy_from_user(to, from, n);
  15. else
  16. memset(to, 0, n);
  17. return n;
  18. }
  19. unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
  20. {
  21. if (likely(access_ok(VERIFY_WRITE, to, n)))
  22. n = __copy_to_user(to, from, n);
  23. return n;
  24. }
  25. unsigned long copy_in_user(void __user *to, const void __user *from,
  26. unsigned long n)
  27. {
  28. might_sleep();
  29. if (likely(access_ok(VERIFY_READ, from, n) &&
  30. access_ok(VERIFY_WRITE, to, n)))
  31. n =__copy_tofrom_user(to, from, n);
  32. return n;
  33. }
  34. EXPORT_SYMBOL(copy_from_user);
  35. EXPORT_SYMBOL(copy_to_user);
  36. EXPORT_SYMBOL(copy_in_user);