diff options
author | Michael Brown <mcb30@ipxe.org> | 2010-05-22 00:27:10 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2010-05-22 00:27:10 +0100 |
commit | 13dfe2cf51508601ddd605733dfd56ed15a10e60 (patch) | |
tree | 2b76c225345bb1aa8ce98937fb51ef4d52b822ae /src/image | |
parent | dc8eb04647636b6e13c6a728506aba0071c62434 (diff) | |
download | ipxe-13dfe2cf51508601ddd605733dfd56ed15a10e60.zip ipxe-13dfe2cf51508601ddd605733dfd56ed15a10e60.tar.gz ipxe-13dfe2cf51508601ddd605733dfd56ed15a10e60.tar.bz2 |
[script] Accept "#!gpxe" as well as "#!ipxe" as a script magic marker
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/script.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/image/script.c b/src/image/script.c index 61f5a99..b65fa06 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; } |