efivar/SOURCES/0035-Fix-partition-number-detection-when-it-s-not-provide.patch
2021-10-08 10:47:49 +00:00

80 lines
1.8 KiB
Diff

From cff35642eac6699e30549db2db3341e7657bf4a6 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Tue, 18 Sep 2018 14:57:13 -0400
Subject: [PATCH 35/39] Fix partition number detection when it's not provided.
We need to actually get the partition number from the child device when
we're called without it.
Resolves: rhbz#1616305
Signed-off-by: Peter Jones <pjones@redhat.com>
---
src/creator.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/src/creator.c b/src/creator.c
index ef782e2b647..987fa033e5b 100644
--- a/src/creator.c
+++ b/src/creator.c
@@ -350,6 +350,36 @@ efi_generate_file_device_path_from_esp(uint8_t *buf, ssize_t size,
return ret;
}
+static int
+get_part(char *devpath)
+{
+ int fd;
+ int partition = -1;
+ struct device *dev = NULL;
+
+ fd = open(devpath, O_RDONLY);
+ if (fd < 0) {
+ efi_error("could not open device for ESP");
+ goto err;
+ }
+
+ dev = device_get(fd, -1);
+ if (dev == NULL) {
+ efi_error("could not get ESP disk info");
+ goto err;
+ }
+
+ partition = dev->part;
+ if (partition < 0)
+ partition = 0;
+err:
+ if (dev)
+ device_free(dev);
+ if (fd >= 0)
+ close(fd);
+ return partition;
+}
+
ssize_t NONNULL(3) PUBLIC
efi_generate_file_device_path(uint8_t *buf, ssize_t size,
const char * const filepath,
@@ -374,6 +404,19 @@ efi_generate_file_device_path(uint8_t *buf, ssize_t size,
efi_error("could not find parent device for file");
goto err;
}
+ debug("child_devpath:%s", child_devpath);
+
+ debug("parent_devpath:%s", parent_devpath);
+ debug("child_devpath:%s", child_devpath);
+ debug("rc:%d", rc);
+
+ rc = get_part(child_devpath);
+ if (rc < 0) {
+ efi_error("Couldn't get partition number for %s",
+ child_devpath);
+ goto err;
+ }
+ debug("detected partition:%d", rc);
va_start(ap, options);
--
2.17.1