mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 15:47:03 +07:00
70d65cd555
... and get rid of the pointless fallback in the wrappers. On error it used to zero the unwritten area and calculate the csum of the entire thing. Not wanting to do it in assembler part had been very reasonable; doing that in the first place, OTOH... In case of an error the caller discards the data we'd copied, along with whatever checksum it might've had. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
49 lines
982 B
C
49 lines
982 B
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
*
|
|
* Copyright (C) IBM Corporation, 2010
|
|
*
|
|
* Author: Anton Blanchard <anton@au.ibm.com>
|
|
*/
|
|
#include <linux/export.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/types.h>
|
|
#include <asm/checksum.h>
|
|
#include <linux/uaccess.h>
|
|
|
|
__wsum csum_and_copy_from_user(const void __user *src, void *dst,
|
|
int len)
|
|
{
|
|
__wsum csum;
|
|
|
|
might_sleep();
|
|
|
|
if (unlikely(!access_ok(src, len)))
|
|
return 0;
|
|
|
|
allow_read_from_user(src, len);
|
|
|
|
csum = csum_partial_copy_generic((void __force *)src, dst, len);
|
|
|
|
prevent_read_from_user(src, len);
|
|
return csum;
|
|
}
|
|
EXPORT_SYMBOL(csum_and_copy_from_user);
|
|
|
|
__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len)
|
|
{
|
|
__wsum csum;
|
|
|
|
might_sleep();
|
|
if (unlikely(!access_ok(dst, len)))
|
|
return 0;
|
|
|
|
allow_write_to_user(dst, len);
|
|
|
|
csum = csum_partial_copy_generic(src, (void __force *)dst, len);
|
|
|
|
prevent_write_to_user(dst, len);
|
|
return csum;
|
|
}
|
|
EXPORT_SYMBOL(csum_and_copy_to_user);
|