Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1390647

[PATCH v3] x86/boot: Warn on future overlapping memcpy() use

From Kees Cook <keescook@chromium.org>
Newsgroups linux.kernel
Subject [PATCH v3] x86/boot: Warn on future overlapping memcpy() use
Date 2016-04-29 01:50 +0200
Message-ID <rt3QZ-4g6-1@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


If an overlapping memcpy() is ever attempted, we should report it and
gracefully call memmove(). These cases can be found and fixed to use
memmove() correctly, but in the meantime, we will not break booting.

Suggested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
---
 arch/x86/boot/compressed/string.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/x86/boot/compressed/string.c b/arch/x86/boot/compressed/string.c
index 2befeca1aada..7402227fdfdb 100644
--- a/arch/x86/boot/compressed/string.c
+++ b/arch/x86/boot/compressed/string.c
@@ -8,7 +8,7 @@
 #include "../string.c"
 
 #ifdef CONFIG_X86_32
-void *memcpy(void *dest, const void *src, size_t n)
+static void *__memcpy(void *dest, const void *src, size_t n)
 {
 	int d0, d1, d2;
 	asm volatile(
@@ -22,7 +22,7 @@ void *memcpy(void *dest, const void *src, size_t n)
 	return dest;
 }
 #else
-void *memcpy(void *dest, const void *src, size_t n)
+static void *__memcpy(void *dest, const void *src, size_t n)
 {
 	long d0, d1, d2;
 	asm volatile(
@@ -60,3 +60,14 @@ void *memmove(void *dest, const void *src, size_t n)
 
 	return dest;
 }
+
+/* Detect and warn about potential overlaps, but handle them with memmove. */
+void *memcpy(void *dest, const void *src, size_t n)
+{
+	if (dest > src && dest - src < n) {
+		warn("Avoiding potentially unsafe overlapping memcpy()!");
+		return memmove(dest, src, n);
+	}
+	return __memcpy(dest, src, n);
+}
+
-- 
2.6.3


-- 
Kees Cook
Chrome OS & Brillo Security

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH v3] x86/boot: Warn on future overlapping memcpy() use Kees Cook <keescook@chromium.org> - 2016-04-29 01:50 +0200
  Re: [PATCH v3] x86/boot: Warn on future overlapping memcpy() use Kees Cook <keescook@chromium.org> - 2016-04-29 01:50 +0200
  Re: [PATCH v3] x86/boot: Warn on future overlapping memcpy() use kbuild test robot <lkp@intel.com> - 2016-04-29 02:00 +0200
    Re: [PATCH v3] x86/boot: Warn on future overlapping memcpy() use Kees Cook <keescook@chromium.org> - 2016-04-29 02:20 +0200

csiph-web