]> git.armaanb.net Git - asd-repo.git/blobdiff - extra/efivar/patches/00-b98ba8921010d03f46704a476c69861515deb1ca.patch
efivar, efibootmgr: move to extra
[asd-repo.git] / extra / efivar / patches / 00-b98ba8921010d03f46704a476c69861515deb1ca.patch
diff --git a/extra/efivar/patches/00-b98ba8921010d03f46704a476c69861515deb1ca.patch b/extra/efivar/patches/00-b98ba8921010d03f46704a476c69861515deb1ca.patch
new file mode 100644 (file)
index 0000000..f40942f
--- /dev/null
@@ -0,0 +1,56 @@
+From b98ba8921010d03f46704a476c69861515deb1ca Mon Sep 17 00:00:00 2001
+From: Peter Jones <pjones@redhat.com>
+Date: Mon, 7 Jan 2019 10:30:59 -0500
+Subject: [PATCH] dp.h: make format_guid() handle misaligned guid pointers
+ safely.
+
+GCC 9 adds -Werror=address-of-packed-member, which causes us to see the
+build error reported at
+ https://bugzilla.opensuse.org/show_bug.cgi?id=1120862 .
+
+That bug report shows us the following:
+
+In file included from dp.c:26:
+dp.h: In function 'format_vendor_helper':
+dp.h:120:37: error: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Werror=address-of-packed-member]
+  120 |  format_guid(buf, size, off, label, &dp->hw_vendor.vendor_guid);
+      |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~
+dp.h:74:25: note: in definition of macro 'format_guid'
+   74 |   _rc = efi_guid_to_str(guid, &_guidstr);   \
+      |                         ^~~~
+cc1: all warnings being treated as errors
+
+This patch makes format_guid() use a local variable as a bounce buffer
+in the case that the guid we're passed is aligned as chaotic neutral.
+
+Note that this only fixes this instance and there may be others that bz
+didn't show because it exited too soon, and I don't have a gcc 9 build
+in front of me right now.
+
+Signed-off-by: Peter Jones <pjones@redhat.com>
+---
+ src/dp.h | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/dp.h b/src/dp.h
+index aa4e390..20cb608 100644
+--- a/src/dp.h
++++ b/src/dp.h
+@@ -70,8 +70,15 @@
+ #define format_guid(buf, size, off, dp_type, guid) ({                 \
+               int _rc;                                                \
+               char *_guidstr = NULL;                                  \
+-                                                                      \
+-              _rc = efi_guid_to_str(guid, &_guidstr);                 \
++              efi_guid_t _guid;                                       \
++              const efi_guid_t * const _guid_p =                      \
++                      likely(__alignof__(guid) == sizeof(guid))       \
++                              ? guid                                  \
++                              : &_guid;                               \
++                                                                      \
++              if (unlikely(__alignof__(guid) == sizeof(guid)))        \
++                      memmove(&_guid, guid, sizeof(_guid));           \
++              _rc = efi_guid_to_str(_guid_p, &_guidstr);              \
+               if (_rc < 0) {                                          \
+                       efi_error("could not build %s GUID DP string",  \
+                                 dp_type);                             \