aboutsummaryrefslogtreecommitdiff
path: root/utils/gummiboot/patches/020-fix-dev-mapping.patch
diff options
context:
space:
mode:
authorOskari Rauta <oskari.rauta@gmail.com>2021-04-21 03:58:42 +0300
committerRosen Penev <rosenp@gmail.com>2021-04-24 01:12:39 -0700
commitccf1b96e0eb8342adfc0a9f06f473a7e9218d753 (patch)
tree25c1e6057430e4b72f16f15497c20ac3c447b904 /utils/gummiboot/patches/020-fix-dev-mapping.patch
parent5d4d292e501a42e85107e2430fb49eb963fa5f7b (diff)
gummiboot: add new package
Signed-off-by: Oskari Rauta <oskari.rauta@gmail.com>
Diffstat (limited to 'utils/gummiboot/patches/020-fix-dev-mapping.patch')
-rw-r--r--utils/gummiboot/patches/020-fix-dev-mapping.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/utils/gummiboot/patches/020-fix-dev-mapping.patch b/utils/gummiboot/patches/020-fix-dev-mapping.patch
new file mode 100644
index 000000000..0446aa2d0
--- /dev/null
+++ b/utils/gummiboot/patches/020-fix-dev-mapping.patch
@@ -0,0 +1,54 @@
+--- a/src/setup/setup.c
++++ b/src/setup/setup.c
+@@ -83,6 +83,9 @@ static int verify_esp(const char *p, uin
+ blkid_probe b = NULL;
+ int r;
+ const char *v;
++ char buf[1024];
++
++ memset(buf, 0, sizeof(buf));
+
+ if (statfs(p, &sfs) < 0) {
+ fprintf(stderr, "Failed to check file system type of %s: %m\n", p);
+@@ -122,24 +125,38 @@ static int verify_esp(const char *p, uin
+ return -ENODEV;
+ }
+
+- r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
++ r = asprintf(&t, "/sys/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
+ if (r < 0) {
+ fprintf(stderr, "Out of memory.\n");
+ return -ENOMEM;
+ }
+
++ r = readlink(t, buf, sizeof(buf) - 1);
++ if (r < 0) {
++ fprintf(stderr, "Failed to identify device node for block device %u:%u\n", major(st.st_dev), minor(st.st_dev));
++ return -ENOMEM;
++ }
++
++ r = asprintf(&t, "/dev/%s", basename(buf));
++ if (r < 0) {
++ fprintf(stderr, "Out of memory.\n");
++ return -ENOMEM;
++ }
++
+ errno = 0;
+ b = blkid_new_probe_from_filename(t);
+- free(t);
+ if (!b) {
+ if (errno != 0) {
+- fprintf(stderr, "Failed to open file system %s: %m\n", p);
++ fprintf(stderr, "Failed to open file system %s on %s: %m\n", p, t);
++ free(t);
+ return -errno;
+ }
+
++ free(t);
+ fprintf(stderr, "Out of memory.\n");
+ return -ENOMEM;
+ }
++ free(t);
+
+ blkid_probe_enable_superblocks(b, 1);
+ blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);