--- 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;