From 13dfe2cf51508601ddd605733dfd56ed15a10e60 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 22 May 2010 00:27:10 +0100 Subject: [PATCH] [script] Accept "#!gpxe" as well as "#!ipxe" as a script magic marker Signed-off-by: Michael Brown --- src/image/script.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/image/script.c b/src/image/script.c index 61f5a997..b65fa061 100644 --- a/src/image/script.c +++ b/src/image/script.c @@ -91,8 +91,12 @@ static int script_exec ( struct image *image ) { * @ret rc Return status code */ static int script_load ( struct image *image ) { - static const char magic[] = "#!ipxe"; - char test[ sizeof ( magic ) - 1 /* NUL */ + 1 /* terminating space */]; + static const char ipxe_magic[] = "#!ipxe"; + static const char gpxe_magic[] = "#!gpxe"; + linker_assert ( sizeof ( ipxe_magic ) == sizeof ( gpxe_magic ), + magic_size_mismatch ); + char test[ sizeof ( ipxe_magic ) - 1 /* NUL */ + + 1 /* terminating space */]; /* Sanity check */ if ( image->len < sizeof ( test ) ) { @@ -102,8 +106,9 @@ static int script_load ( struct image *image ) { /* Check for magic signature */ copy_from_user ( test, image->data, 0, sizeof ( test ) ); - if ( ( memcmp ( test, magic, ( sizeof ( test ) - 1 ) ) != 0 ) || - ! isspace ( test[ sizeof ( test ) - 1 ] ) ) { + if ( ! ( ( ( memcmp ( test, ipxe_magic, sizeof ( test ) - 1 ) == 0 ) || + ( memcmp ( test, gpxe_magic, sizeof ( test ) - 1 ) == 0 )) && + isspace ( test[ sizeof ( test ) - 1 ] ) ) ) { DBG ( "Invalid magic signature\n" ); return -ENOEXEC; }