Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
m32r
lib
csum_partial_copy.c
Go to the documentation of this file.
1
/*
2
* INET An implementation of the TCP/IP protocol suite for the LINUX
3
* operating system. INET is implemented using the BSD Socket
4
* interface as the means of communication with the user level.
5
*
6
* M32R specific IP/TCP/UDP checksumming routines
7
* (Some code taken from MIPS architecture)
8
*
9
* This file is subject to the terms and conditions of the GNU General Public
10
* License. See the file "COPYING" in the main directory of this archive
11
* for more details.
12
*
13
* Copyright (C) 1994, 1995 Waldorf Electronics GmbH
14
* Copyright (C) 1998, 1999 Ralf Baechle
15
* Copyright (C) 2001-2005 Hiroyuki Kondo, Hirokazu Takata
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
* Copy while checksumming, otherwise like csum_partial
29
*/
30
__wsum
31
csum_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
}
38
EXPORT_SYMBOL
(
csum_partial_copy_nocheck
);
39
40
/*
41
* Copy from userspace and compute checksum. If we catch an exception
42
* then zero the rest of the buffer.
43
*/
44
__wsum
45
csum_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
}
58
EXPORT_SYMBOL
(
csum_partial_copy_from_user
);
59
EXPORT_SYMBOL
(
csum_partial
);
Generated on Thu Jan 10 2013 12:53:48 for Linux Kernel by
1.8.2