david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[bzimage] Support kernel command lines of greater than 256 characters

2.6.22+ kernels have an extra field in the bzimage_header structure to
indicate the maximum permitted command-line length.  Use this if it is
available.
This commit is contained in:
Michael Brown 2008-06-12 02:19:10 +01:00
parent 4c85017968
commit ac28d054c8
2 changed files with 18 additions and 2 deletions

View File

@ -76,6 +76,8 @@ struct bzimage_exec_context {
size_t rm_heap;
/** Command line (offset from rm_kernel) */
size_t rm_cmdline;
/** Command line maximum length */
size_t cmdline_size;
/** Video mode */
unsigned int vid_mode;
/** Memory limit */
@ -162,8 +164,8 @@ static int bzimage_set_cmdline ( struct image *image,
/* Copy command line down to real-mode portion */
cmdline_len = ( strlen ( cmdline ) + 1 );
if ( cmdline_len > BZI_CMDLINE_SIZE )
cmdline_len = BZI_CMDLINE_SIZE;
if ( cmdline_len > exec_ctx->cmdline_size )
cmdline_len = exec_ctx->cmdline_size;
copy_to_user ( exec_ctx->rm_kernel, exec_ctx->rm_cmdline,
cmdline, cmdline_len );
DBGC ( image, "bzImage %p command line \"%s\"\n", image, cmdline );
@ -320,6 +322,12 @@ static int bzimage_exec ( struct image *image ) {
} else {
exec_ctx.mem_limit = BZI_INITRD_MAX;
}
if ( bzhdr.version >= 0x0206 ) {
exec_ctx.cmdline_size = bzhdr.cmdline_size;
} else {
exec_ctx.cmdline_size = BZI_CMDLINE_SIZE;
}
DBG ( "cmdline_size = %zd\n", exec_ctx.cmdline_size );
/* Parse command line for bootloader parameters */
if ( ( rc = bzimage_parse_cmdline ( image, &exec_ctx, cmdline ) ) != 0)

View File

@ -62,6 +62,14 @@ struct bzimage_header {
uint32_t cmd_line_ptr;
/** Highest legal initrd address */
uint32_t initrd_addr_max;
/** Physical addr alignment required for kernel */
uint32_t kernel_alignment;
/** Whether kernel is relocatable or not */
uint8_t relocatable_kernel;
/** Unused */
uint8_t pad2[3];
/** Maximum size of the kernel command line */
uint32_t cmdline_size;
} __attribute__ (( packed ));
/** Offset of bzImage header within kernel image */