]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
x86/boot: Extract error reporting functions
authorKees Cook <keescook@chromium.org>
Mon, 2 May 2016 22:51:00 +0000 (15:51 -0700)
committerIngo Molnar <mingo@kernel.org>
Tue, 3 May 2016 06:15:58 +0000 (08:15 +0200)
Currently to use warn(), a caller would need to include misc.h. However,
this means they would get the (unavailable during compressed boot)
gcc built-in memcpy family of functions. But since string.c is defining
these memcpy functions for use by misc.c, we end up in a weird circular
dependency.

To break this loop, move the error reporting functions outside of misc.c
with their own header so that they can be independently included by
other sources. Since the screen-writing routines use memmove(), keep the
low-level *_putstr() functions in misc.c.

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Baoquan He <bhe@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Lasse Collin <lasse.collin@tukaani.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/r/1462229461-3370-2-git-send-email-keescook@chromium.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/boot/compressed/Makefile
arch/x86/boot/compressed/error.c [new file with mode: 0644]
arch/x86/boot/compressed/error.h [new file with mode: 0644]
arch/x86/boot/compressed/kaslr.c
arch/x86/boot/compressed/misc.c
arch/x86/boot/compressed/misc.h
arch/x86/boot/compressed/string.c

index 75f2233b8414ff580902a0cb9d8e54cbafdbdae9..77ce3a04d46ea038c34fc4b48fa8f59e18e82153 100644 (file)
@@ -70,7 +70,7 @@ $(obj)/../voffset.h: vmlinux FORCE
 $(obj)/misc.o: $(obj)/../voffset.h
 
 vmlinux-objs-y := $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \
-       $(obj)/string.o $(obj)/cmdline.o \
+       $(obj)/string.o $(obj)/cmdline.o $(obj)/error.o \
        $(obj)/piggy.o $(obj)/cpuflags.o
 
 vmlinux-objs-$(CONFIG_EARLY_PRINTK) += $(obj)/early_serial_console.o
diff --git a/arch/x86/boot/compressed/error.c b/arch/x86/boot/compressed/error.c
new file mode 100644 (file)
index 0000000..6248740
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Callers outside of misc.c need access to the error reporting routines,
+ * but the *_putstr() functions need to stay in misc.c because of how
+ * memcpy() and memmove() are defined for the compressed boot environment.
+ */
+#include "misc.h"
+
+void warn(char *m)
+{
+       error_putstr("\n\n");
+       error_putstr(m);
+       error_putstr("\n\n");
+}
+
+void error(char *m)
+{
+       warn(m);
+       error_putstr(" -- System halted");
+
+       while (1)
+               asm("hlt");
+}
diff --git a/arch/x86/boot/compressed/error.h b/arch/x86/boot/compressed/error.h
new file mode 100644 (file)
index 0000000..2e59dac
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef BOOT_COMPRESSED_ERROR_H
+#define BOOT_COMPRESSED_ERROR_H
+
+void warn(char *m);
+void error(char *m);
+
+#endif /* BOOT_COMPRESSED_ERROR_H */
index 8741a6d83bfeee249996f2a3c893e9bb4ac73adb..f1818d95d726cb0c9144fd4983b7f23543a842df 100644 (file)
@@ -10,6 +10,7 @@
  *
  */
 #include "misc.h"
+#include "error.h"
 
 #include <asm/msr.h>
 #include <asm/archrandom.h>
index 8f0253d8c7fffa7108059eecc7df0c09e4c36493..9536d778149e4f01a53cb53046499b59a114f9d6 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include "misc.h"
+#include "error.h"
 #include "../string.h"
 #include "../voffset.h"
 
@@ -36,7 +37,6 @@
 #define memmove                memmove
 
 /* Functions used by the included decompressor code below. */
-static void error(char *m);
 void *memmove(void *dest, const void *src, size_t n);
 
 /*
@@ -169,22 +169,6 @@ void __puthex(unsigned long value)
        }
 }
 
-void warn(char *m)
-{
-       error_putstr("\n\n");
-       error_putstr(m);
-       error_putstr("\n\n");
-}
-
-static void error(char *m)
-{
-       warn(m);
-       error_putstr(" -- System halted");
-
-       while (1)
-               asm("hlt");
-}
-
 #if CONFIG_X86_NEED_RELOCS
 static void handle_relocations(void *output, unsigned long output_len)
 {
index e75f6cf9caafac060f37dbcd2118351075a3048d..9887e0d4aaeb9bba082fb0027b07569007512522 100644 (file)
@@ -35,7 +35,6 @@ extern memptr free_mem_end_ptr;
 extern struct boot_params *boot_params;
 void __putstr(const char *s);
 void __puthex(unsigned long value);
-void warn(char *m);
 #define error_putstr(__x)  __putstr(__x)
 #define error_puthex(__x)  __puthex(__x)
 
index 2befeca1aada00df053fa58bf0772773482d6aa8..faa4dc7dc66b8dc4104ca0c81450fba1be41b895 100644 (file)
@@ -5,6 +5,8 @@
  * trust the gcc built-in implementations as they may do unexpected things
  * (e.g. FPU ops) in the minimal decompression stub execution environment.
  */
+#include "error.h"
+
 #include "../string.c"
 
 #ifdef CONFIG_X86_32