1/* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License 4 * as published by the Free Software Foundation; either version 5 * 2 of the License, or (at your option) any later version. 6 */ 7#include <linux/module.h> 8#include <net/checksum.h> 9 10#include <asm/byteorder.h> 11 12/* 13 * copy from fs while checksumming, otherwise like csum_partial 14 */ 15__wsum 16csum_partial_copy_from_user(const void __user *src, void *dst, int len, 17 __wsum sum, int *csum_err) 18{ 19 int missing; 20 21 missing = __copy_from_user(dst, src, len); 22 if (missing) { 23 memset(dst + len - missing, 0, missing); 24 *csum_err = -EFAULT; 25 } else 26 *csum_err = 0; 27 28 return csum_partial(dst, len, sum); 29} 30EXPORT_SYMBOL(csum_partial_copy_from_user); 31 32/* These are from csum_64plus.S */ 33EXPORT_SYMBOL(csum_partial); 34EXPORT_SYMBOL(csum_partial_copy); 35EXPORT_SYMBOL(ip_compute_csum); 36EXPORT_SYMBOL(ip_fast_csum); 37