Skip to content

Commit

Permalink
[script] Avoid using stack-allocated memory in process_line()
Browse files Browse the repository at this point in the history
Script lines can be arbitrarily long; allocate on the heap rather than
on the stack.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Apr 23, 2012
1 parent de26161 commit a026a27
Showing 1 changed file with 15 additions and 14 deletions.
29 changes: 15 additions & 14 deletions src/image/script.c
Expand Up @@ -58,6 +58,7 @@ static int process_script ( struct image *image,
int ( * terminate ) ( int rc ) ) {
off_t eol;
size_t len;
char *line;
int rc;

script_offset = 0;
Expand All @@ -71,23 +72,23 @@ static int process_script ( struct image *image,
eol = image->len;
len = ( eol - script_offset );

/* Copy line, terminate with NUL, and execute command */
{
char cmdbuf[ len + 1 ];
/* Allocate buffer for line */
line = zalloc ( len + 1 /* NUL */ );
if ( ! line )
return -ENOMEM;

copy_from_user ( cmdbuf, image->data,
script_offset, len );
cmdbuf[len] = '\0';
DBG ( "$ %s\n", cmdbuf );
/* Copy line */
copy_from_user ( line, image->data, script_offset, len );
DBG ( "$ %s\n", line );

/* Move to next line */
script_offset += ( len + 1 );
/* Move to next line */
script_offset += ( len + 1 );

/* Process line */
rc = process_line ( cmdbuf );
if ( terminate ( rc ) )
return rc;
}
/* Process and free line */
rc = process_line ( line );
free ( line );
if ( terminate ( rc ) )
return rc;

} while ( script_offset < image->len );

Expand Down

0 comments on commit a026a27

Please sign in to comment.