| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 1 | 2 | #ifndef __ASM_SH_CHECKSUM_H |
|---|
| 2 | 3 | #define __ASM_SH_CHECKSUM_H |
|---|
| 3 | 4 | |
|---|
| 4 | 5 | /* |
|---|
| 5 | | - * This file is subject to the terms and conditions of the GNU General Public |
|---|
| 6 | | - * License. See the file "COPYING" in the main directory of this archive |
|---|
| 7 | | - * for more details. |
|---|
| 8 | | - * |
|---|
| 9 | 6 | * Copyright (C) 1999 by Kaz Kojima & Niibe Yutaka |
|---|
| 10 | 7 | */ |
|---|
| 11 | 8 | |
|---|
| .. | .. |
|---|
| 33 | 30 | * better 64-bit) boundary |
|---|
| 34 | 31 | */ |
|---|
| 35 | 32 | |
|---|
| 36 | | -asmlinkage __wsum csum_partial_copy_generic(const void *src, void *dst, |
|---|
| 37 | | - int len, __wsum sum, |
|---|
| 38 | | - int *src_err_ptr, int *dst_err_ptr); |
|---|
| 33 | +asmlinkage __wsum csum_partial_copy_generic(const void *src, void *dst, int len); |
|---|
| 39 | 34 | |
|---|
| 35 | +#define _HAVE_ARCH_CSUM_AND_COPY |
|---|
| 40 | 36 | /* |
|---|
| 41 | 37 | * Note: when you get a NULL pointer exception here this means someone |
|---|
| 42 | 38 | * passed in an incorrect kernel address to one of these functions. |
|---|
| .. | .. |
|---|
| 45 | 41 | * access_ok(). |
|---|
| 46 | 42 | */ |
|---|
| 47 | 43 | static inline |
|---|
| 48 | | -__wsum csum_partial_copy_nocheck(const void *src, void *dst, |
|---|
| 49 | | - int len, __wsum sum) |
|---|
| 44 | +__wsum csum_partial_copy_nocheck(const void *src, void *dst, int len) |
|---|
| 50 | 45 | { |
|---|
| 51 | | - return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL); |
|---|
| 46 | + return csum_partial_copy_generic(src, dst, len); |
|---|
| 52 | 47 | } |
|---|
| 53 | 48 | |
|---|
| 49 | +#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER |
|---|
| 54 | 50 | static inline |
|---|
| 55 | | -__wsum csum_partial_copy_from_user(const void __user *src, void *dst, |
|---|
| 56 | | - int len, __wsum sum, int *err_ptr) |
|---|
| 51 | +__wsum csum_and_copy_from_user(const void __user *src, void *dst, int len) |
|---|
| 57 | 52 | { |
|---|
| 58 | | - return csum_partial_copy_generic((__force const void *)src, dst, |
|---|
| 59 | | - len, sum, err_ptr, NULL); |
|---|
| 53 | + if (!access_ok(src, len)) |
|---|
| 54 | + return 0; |
|---|
| 55 | + return csum_partial_copy_generic((__force const void *)src, dst, len); |
|---|
| 60 | 56 | } |
|---|
| 61 | 57 | |
|---|
| 62 | 58 | /* |
|---|
| .. | .. |
|---|
| 197 | 193 | #define HAVE_CSUM_COPY_USER |
|---|
| 198 | 194 | static inline __wsum csum_and_copy_to_user(const void *src, |
|---|
| 199 | 195 | void __user *dst, |
|---|
| 200 | | - int len, __wsum sum, |
|---|
| 201 | | - int *err_ptr) |
|---|
| 196 | + int len) |
|---|
| 202 | 197 | { |
|---|
| 203 | | - if (access_ok(VERIFY_WRITE, dst, len)) |
|---|
| 204 | | - return csum_partial_copy_generic((__force const void *)src, |
|---|
| 205 | | - dst, len, sum, NULL, err_ptr); |
|---|
| 206 | | - |
|---|
| 207 | | - if (len) |
|---|
| 208 | | - *err_ptr = -EFAULT; |
|---|
| 209 | | - |
|---|
| 210 | | - return (__force __wsum)-1; /* invalid checksum */ |
|---|
| 198 | + if (!access_ok(dst, len)) |
|---|
| 199 | + return 0; |
|---|
| 200 | + return csum_partial_copy_generic((__force const void *)src, dst, len); |
|---|
| 211 | 201 | } |
|---|
| 212 | 202 | #endif /* __ASM_SH_CHECKSUM_H */ |
|---|