checksum_wrappers.c 813 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. *
  4. * Copyright (C) IBM Corporation, 2010
  5. *
  6. * Author: Anton Blanchard <[email protected]>
  7. */
  8. #include <linux/export.h>
  9. #include <linux/compiler.h>
  10. #include <linux/types.h>
  11. #include <asm/checksum.h>
  12. #include <linux/uaccess.h>
  13. __wsum csum_and_copy_from_user(const void __user *src, void *dst,
  14. int len)
  15. {
  16. __wsum csum;
  17. if (unlikely(!user_read_access_begin(src, len)))
  18. return 0;
  19. csum = csum_partial_copy_generic((void __force *)src, dst, len);
  20. user_read_access_end();
  21. return csum;
  22. }
  23. __wsum csum_and_copy_to_user(const void *src, void __user *dst, int len)
  24. {
  25. __wsum csum;
  26. if (unlikely(!user_write_access_begin(dst, len)))
  27. return 0;
  28. csum = csum_partial_copy_generic(src, (void __force *)dst, len);
  29. user_write_access_end();
  30. return csum;
  31. }