efi_loader: allow device == NULL in efi_dp_from_name()
authorAKASHI Takahiro <takahiro.akashi@linaro.org>
Mon, 5 Nov 2018 09:06:40 +0000 (18:06 +0900)
committerAlexander Graf <agraf@suse.de>
Sun, 2 Dec 2018 23:13:15 +0000 (00:13 +0100)
This is a preparatory patch for use in efi_serialize_load_option()
as a load option's file_path should have both a device path and
a file path.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
lib/efi_loader/efi_device_path.c

index cdf7c7be8c5c708285d8fb84ba9ef404a89c82cc..d94982314a3ea64cb781d57ec6e39623f21e0388 100644 (file)
@@ -955,7 +955,7 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
        char filename[32] = { 0 }; /* dp->str is u16[32] long */
        char *s;
 
-       if (!device || (path && !file))
+       if (path && !file)
                return EFI_INVALID_PARAMETER;
 
        is_net = !strcmp(dev, "Net");
@@ -965,10 +965,12 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
                if (part < 0)
                        return EFI_INVALID_PARAMETER;
 
-               *device = efi_dp_from_part(desc, part);
+               if (device)
+                       *device = efi_dp_from_part(desc, part);
        } else {
 #ifdef CONFIG_NET
-               *device = efi_dp_from_eth();
+               if (device)
+                       *device = efi_dp_from_eth();
 #endif
        }
 
@@ -985,7 +987,8 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
        s = filename;
        while ((s = strchr(s, '/')))
                *s++ = '\\';
-       *file = efi_dp_from_file(NULL, 0, filename);
+       *file = efi_dp_from_file(((!is_net && device) ? desc : NULL),
+                                part, filename);
 
        return EFI_SUCCESS;
 }