OSDN Git Service

dp.h: make format_guid() handle misaligned guid pointers safely.
authorPeter Jones <pjones@redhat.com>
Mon, 7 Jan 2019 15:30:59 +0000 (10:30 -0500)
committerPeter Jones <pjones@redhat.com>
Mon, 7 Jan 2019 16:27:02 +0000 (11:27 -0500)
commitb98ba8921010d03f46704a476c69861515deb1ca
tree05bb8b614e38bc164be797794fdfb1e998eb06dd
parentcb0b1c30103abc17dbbed14210bbc59a73802206
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