]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[script] Accept "#!gpxe" as well as "#!ipxe" as a script magic marker
authorMichael Brown <mcb30@ipxe.org>
Fri, 21 May 2010 23:27:10 +0000 (00:27 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 21 May 2010 23:27:10 +0000 (00:27 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/image/script.c

index 61f5a99795c59a4be5b97f3e1adb1a4bdfe6196a..b65fa061f328b341b68b74794fbdf60cd2bd057f 100644 (file)
@@ -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;
        }