]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Allow passing a NULL device path to path utility functions
authorMichael Brown <mcb30@ipxe.org>
Thu, 22 Dec 2022 13:28:06 +0000 (13:28 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 22 Dec 2022 13:30:02 +0000 (13:30 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_local.c
src/interface/efi/efi_path.c

index 4ebca572645abef9fa0edff098a15310fd0a1c97..d8edb62633772c73339411415f58aa21361e1ab4 100644 (file)
@@ -425,7 +425,7 @@ static int efi_local_open_resolved ( struct efi_local *local,
 static int efi_local_open_path ( struct efi_local *local, const char *path ) {
        FILEPATH_DEVICE_PATH *fp = container_of ( efi_loaded_image->FilePath,
                                                  FILEPATH_DEVICE_PATH, Header);
-       size_t fp_len = ( fp ? efi_path_len ( &fp->Header ) : 0 );
+       size_t fp_len = efi_path_len ( &fp->Header );
        char base[ fp_len / 2 /* Cannot exceed this length */ ];
        size_t remaining = sizeof ( base );
        size_t len;
index bae0ac4b54138ff5b5c6b77dcb1cbbad2f3f4f90..1a95a3b9a0baeb1c17bb02f96161d6e7422004f1 100644 (file)
 /**
  * Find end of device path
  *
- * @v path             Path to device
- * @ret path_end       End of device path
+ * @v path             Device path, or NULL
+ * @ret path_end       End of device path, or NULL
  */
 EFI_DEVICE_PATH_PROTOCOL * efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path ) {
 
-       while ( path->Type != END_DEVICE_PATH_TYPE ) {
+       while ( path && ( path->Type != END_DEVICE_PATH_TYPE ) ) {
                path = ( ( ( void * ) path ) +
                         /* There's this amazing new-fangled thing known as
                          * a UINT16, but who wants to use one of those? */
@@ -61,7 +61,7 @@ EFI_DEVICE_PATH_PROTOCOL * efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path ) {
 /**
  * Find length of device path (excluding terminator)
  *
- * @v path             Path to device
+ * @v path             Device path, or NULL
  * @ret path_len       Length of device path
  */
 size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *path ) {