Skip to content

Commit

Permalink
x86/mm, x86/mce: Fix return type/value for memcpy_mcsafe()
Browse files Browse the repository at this point in the history
Returning a 'bool' was very unpopular. Doubly so because the
code was just wrong (returning zero for true, one for false;
great for shell programming, not so good for C).

Change return type to "int". Keep zero as the success indicator
because it matches other similar code and people may be more
comfortable writing:

	if (memcpy_mcsafe(to, from, count)) {
		printk("Sad panda, copy failed\n");
		...
	}

Make the failure return value -EFAULT for now.

Reported by: Mika Penttilä <mika.penttila@nextfour.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: mika.penttila@nextfour.com
Fixes: 92b0729 ("x86/mm, x86/mce: Add memcpy_mcsafe()")
Link: http://lkml.kernel.org/r/695f14233fa7a54fcac4406c706d7fec228e3f4c.1457993040.git.tony.luck@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Tony Luck authored and Ingo Molnar committed Mar 16, 2016
1 parent ba4e06d commit cbf8b5a
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
4 changes: 2 additions & 2 deletions arch/x86/include/asm/string_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ int strcmp(const char *cs, const char *ct);
*
* Low level memory copy function that catches machine checks
*
* Return true for success, false for fail
* Return 0 for success, -EFAULT for fail
*/
bool memcpy_mcsafe(void *dst, const void *src, size_t cnt);
int memcpy_mcsafe(void *dst, const void *src, size_t cnt);

#endif /* __KERNEL__ */

Expand Down
7 changes: 4 additions & 3 deletions arch/x86/lib/memcpy_64.S
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* Copyright 2002 Andi Kleen */

#include <linux/linkage.h>
#include <asm/errno.h>
#include <asm/cpufeatures.h>
#include <asm/alternative-asm.h>

Expand Down Expand Up @@ -268,16 +269,16 @@ ENTRY(memcpy_mcsafe)
decl %ecx
jnz .L_copy_trailing_bytes

/* Copy successful. Return true */
/* Copy successful. Return zero */
.L_done_memcpy_trap:
xorq %rax, %rax
ret
ENDPROC(memcpy_mcsafe)

.section .fixup, "ax"
/* Return false for any failure */
/* Return -EFAULT for any failure */
.L_memcpy_mcsafe_fail:
mov $1, %rax
mov $-EFAULT, %rax
ret

.previous
Expand Down

0 comments on commit cbf8b5a

Please sign in to comment.