---
 ia32/system.c   |    9 ++++++++-
 x86_64/system.c |    9 ++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

Index: elilo/ia32/system.c
===================================================================
--- elilo.orig/ia32/system.c
+++ elilo/ia32/system.c
@@ -487,7 +487,14 @@ sysdeps_create_boot_params(
 	 * can be used by the command line.
 	 */
 	if (param_start != NULL) {
-		CopyMem(bp, param_start, 0x2000);
+		unsigned char *p = param_start;
+		unsigned long setup_header_size = p[0x201] + 0x202 - 0x1f1;
+
+		/* only copy setup_header */
+		if (setup_header_size > 0x7f)
+			setup_header_size = 0x7f;
+		CopyMem((unsigned char *)bp + 0x1f1, p + 0x1f1,
+			setup_header_size);
 		free(param_start);
 		param_start = NULL;
 		param_size = 0;
Index: elilo/x86_64/system.c
===================================================================
--- elilo.orig/x86_64/system.c
+++ elilo/x86_64/system.c
@@ -640,7 +640,14 @@ sysdeps_create_boot_params(
 	 * can be used by the command line.
 	 */
 	if (param_start != NULL) {
-		CopyMem(bp, param_start, 0x2000);
+		unsigned char *p = param_start;
+		unsigned long setup_header_size = p[0x201] + 0x202 - 0x1f1;
+
+		/* only copy setup_header */
+		if (setup_header_size > 0x7f)
+			setup_header_size = 0x7f;
+		CopyMem((unsigned char *)bp + 0x1f1, p + 0x1f1,
+			setup_header_size);
 		free(param_start);
 		param_start = NULL;
 		param_size = 0;
