1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/module.h>
20#include <linux/types.h>
21#include <linux/string.h>
22
23#include <net/checksum.h>
24#include <asm/byteorder.h>
25#include <asm/uaccess.h>
26
27
28
29
30__wsum
31csum_partial_copy_nocheck (const void *src, void *dst, int len, __wsum sum)
32{
33 sum = csum_partial(src, len, sum);
34 memcpy(dst, src, len);
35
36 return sum;
37}
38EXPORT_SYMBOL(csum_partial_copy_nocheck);
39
40
41
42
43
44__wsum
45csum_partial_copy_from_user (const void __user *src, void *dst,
46 int len, __wsum sum, int *err_ptr)
47{
48 int missing;
49
50 missing = copy_from_user(dst, src, len);
51 if (missing) {
52 memset(dst + len - missing, 0, missing);
53 *err_ptr = -EFAULT;
54 }
55
56 return csum_partial(dst, len-missing, sum);
57}
58EXPORT_SYMBOL(csum_partial_copy_from_user);
59EXPORT_SYMBOL(csum_partial);
60