]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Ignore path separator characters in virtual filenames
authorMichael Brown <mcb30@ipxe.org>
Tue, 18 Mar 2025 16:13:55 +0000 (16:13 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 18 Mar 2025 16:21:10 +0000 (16:21 +0000)
The virtual filesystem that we provide to expose downloaded images
will erroneously interpret filenames with redundant path separators
such as ".\filename" as an attempt to open the directory, rather than
an attempt to open "filename".

This shows up most obviously when chainloading from one iPXE into
another iPXE, when the inner iPXE may end up attempting to open
".\autoexec.ipxe" from the outer iPXE's virtual filesystem.  (The
erroneously opened file will have a zero length and will therefore be
ignored, but is still confusing.)

Fix by discarding any dot or backslash characters after a potential
initial backslash.  This is very liberal and will accept some
syntactically invalid paths, but this is acceptable since our virtual
filesystem does not implement directories anyway.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_file.c

index e10c2ec4ec70c333ba163b6fc487ac67573a7ac9..48fccdbe13aefa8729d01ff69024564dff0d9137 100644 (file)
@@ -388,8 +388,12 @@ efi_file_open ( EFI_FILE_PROTOCOL *this, EFI_FILE_PROTOCOL **new,
                name++;
        }
 
+       /* Strip redundant path separator characters */
+       while ( ( *name == '\\' ) || ( *name == '.' ) )
+               name++;
+
        /* Allow root directory itself to be opened */
-       if ( ( name[0] == '\0' ) || ( name[0] == '.' ) )
+       if ( ! *name )
                return efi_file_open_fixed ( &efi_file_root, wname, new );
 
        /* Fail unless opening from the root */