Skip to content

Commit 3b91270

Browse files
committed
x86-64: make csum_partial_copy_from_user() error handling consistent
Al Viro pointed out that the x86-64 csum_partial_copy_from_user() is somewhat confused about what it should do on errors, notably it mostly clears the uncopied end result buffer, but misses that for the initial alignment case. All users should check for errors, so it's dubious whether the clearing is even necessary, and Al also points out that we should probably clean up the calling conventions, but regardless of any future changes to this function, the fact that it is inconsistent is just annoying. So make the __get_user() failure path use the same error exit as all the other errors do. Reported-by: Al Viro <viro@zeniv.linux.org.uk> Cc: David Miller <davem@davemloft.net> Cc: Andi Kleen <andi@firstfloor.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 5f01feb commit 3b91270

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

arch/x86/lib/csum-wrappers_64.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ csum_partial_copy_from_user(const void __user *src, void *dst,
4141
while (((unsigned long)src & 6) && len >= 2) {
4242
__u16 val16;
4343

44-
*errp = __get_user(val16, (const __u16 __user *)src);
45-
if (*errp)
46-
return isum;
44+
if (__get_user(val16, (const __u16 __user *)src))
45+
goto out_err;
4746

4847
*(__u16 *)dst = val16;
4948
isum = (__force __wsum)add32_with_carry(

0 commit comments

Comments
 (0)