diff mbox

[U-Boot] efi_loader: Make exposed image loader path absolute

Message ID 1469058286-229639-1-git-send-email-agraf@suse.de
State Accepted
Commit 492716662fbdc08e254dda2c209b320e2bf6c837
Delegated to: Tom Rini
Headers show

Commit Message

Alexander Graf July 20, 2016, 11:44 p.m. UTC
When loading an efi image, we pass it the location it was loaded from.

On file system backends, there are no relative paths, so we should always
pass in absolute ones. For network paths, we may be relative.

This fixes distro booting with grub2 for me when it fetches the grub2 config
file from the loader partition.

Reported-by: york sun <york.sun@nxp.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
 cmd/bootefi.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Tom Rini July 26, 2016, 2:32 a.m. UTC | #1
On Thu, Jul 21, 2016 at 01:44:46AM +0200, Alexander Graf wrote:

> When loading an efi image, we pass it the location it was loaded from.
> 
> On file system backends, there are no relative paths, so we should always
> pass in absolute ones. For network paths, we may be relative.
> 
> This fixes distro booting with grub2 for me when it fetches the grub2 config
> file from the loader partition.
> 
> Reported-by: york sun <york.sun@nxp.com>
> Signed-off-by: Alexander Graf <agraf@suse.de>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 011f62c..d66892e 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -290,6 +290,11 @@  void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
 
 	/* Patch bootefi_image_path to the target file path */
 	memset(bootefi_image_path[0].str, 0, sizeof(bootefi_image_path[0].str));
-	snprintf(devname, sizeof(devname), "%s", path);
+	if (strcmp(dev, "Net")) {
+		/* Add leading / to fs paths, because they're absolute */
+		snprintf(devname, sizeof(devname), "/%s", path);
+	} else {
+		snprintf(devname, sizeof(devname), "%s", path);
+	}
 	ascii2unicode(bootefi_image_path[0].str, devname);
 }