Hello community,

here is the log from the commit of package efivar for openSUSE:Factory checked 
in at 2019-02-26 22:14:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/efivar (Old)
 and      /work/SRC/openSUSE:Factory/.efivar.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "efivar"

Tue Feb 26 22:14:02 2019 rev:16 rq:678182 version:37

Changes:
--------
--- /work/SRC/openSUSE:Factory/efivar/efivar.changes    2019-01-29 
14:44:33.531103452 +0100
+++ /work/SRC/openSUSE:Factory/.efivar.new.28833/efivar.changes 2019-02-26 
22:14:05.554238807 +0100
@@ -1,0 +2,25 @@
+Fri Feb 22 08:24:56 UTC 2019 - Gary Ching-Pang Lin <[email protected]>
+
+- Update to 37
+  + Improve ACPI device path formatting
+  + Add support for SOC devices that use FDT as their PCI root node
+  + Make devices we can't parse the "device" sysfs link for use
+    DEV_ABBREV_ONLY
+  + Handle SCSI port numbers better
+  + Don't require an EUI for NVMe (boo#1100077)
+  + Fix the accidental requirement on ACPI UID nodes existing
+  + Add support for EMMC devices
+  + Add support for PCI root nodes without a device link in sysfs
+  + Add support for partitioned MD devices
+  + Fix partition number detection when the number isn't provided
+  + Add support for ACPI Generic Container and Embedded Controller
+    root nodes (boo#1101023)
+  + Add limited support for SAS/SATA port expanders
+- Add upstream patches to fix boo#1120862
+  + efivar-make-format_guid-handle-misaligned-guid-pointer.patch
+  + efivar-Fix-all-the-places-Werror-address-of-packed-member-c.patch
+- Drop upstreamed reproducible.patch
+- Refresh libefiboot-export-disk_get_partition_info.patch
+- Use %license for COPYING
+
+-------------------------------------------------------------------

Old:
----
  efivar-35.tar.bz2
  reproducible.patch

New:
----
  efivar-37.tar.bz2
  efivar-Fix-all-the-places-Werror-address-of-packed-member-c.patch
  efivar-make-format_guid-handle-misaligned-guid-pointer.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ efivar.spec ++++++
--- /var/tmp/diff_new_pack.YhJbE1/_old  2019-02-26 22:14:06.502238474 +0100
+++ /var/tmp/diff_new_pack.YhJbE1/_new  2019-02-26 22:14:06.506238472 +0100
@@ -28,7 +28,7 @@
 %define major 1
 
 Name:           efivar
-Version:        35
+Version:        37
 Release:        0
 Summary:        Tools to manage UEFI variables
 License:        LGPL-2.1-only
@@ -36,8 +36,10 @@
 Url:            https://github.com/rhinstaller/efivar
 Source:         
https://github.com/rhinstaller/%{name}/releases/download/%{version}/%{name}-%{version}.tar.bz2
 Patch0:         libefiboot-export-disk_get_partition_info.patch
-# PATCH-FIX-UPSTREAM https://github.com/rhboot/efivar/pull/115
-Patch1:         reproducible.patch
+# PATCH-FIX-UPSTREAM boo#1120862
+Patch1:         efivar-make-format_guid-handle-misaligned-guid-pointer.patch
+# PATCH-FIX-UPSTREAM boo#1120862
+Patch2:         
efivar-Fix-all-the-places-Werror-address-of-packed-member-c.patch
 %if "0%{?buildroot}" == "0"
 # set a sane value for buildroot, unless it's already there!
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -81,6 +83,7 @@
    src/export.c
 %endif
 %patch1 -p1
+%patch2 -p1
 
 %build
 CFLAGS="%{optflags} -Wno-nonnull -flto"
@@ -115,7 +118,7 @@
 
 %files
 %defattr(-,root,root)
-%doc COPYING
+%license COPYING
 %{_bindir}/efivar
 %{_mandir}/man1/*
 

++++++ efivar-35.tar.bz2 -> efivar-37.tar.bz2 ++++++
++++ 14865 lines of diff (skipped)

++++++ efivar-Fix-all-the-places-Werror-address-of-packed-member-c.patch ++++++
>From c3c553db85ff10890209d0fe48fb4856ad68e4e0 Mon Sep 17 00:00:00 2001
From: Peter Jones <[email protected]>
Date: Thu, 21 Feb 2019 15:20:12 -0500
Subject: [PATCH] Fix all the places -Werror=address-of-packed-member catches.

This gets rid of all the places GCC 9's -Werror=address-of-packed-member
flags as problematic.

Fixes github issue #123

Signed-off-by: Peter Jones <[email protected]>
---
 src/dp-message.c            |  6 ++++--
 src/dp.h                    | 12 ++++--------
 src/guid.c                  |  2 +-
 src/include/efivar/efivar.h |  2 +-
 src/ucs2.h                  | 27 +++++++++++++++++++--------
 5 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/src/dp-message.c b/src/dp-message.c
index 3724e5f..9f96466 100644
--- a/src/dp-message.c
+++ b/src/dp-message.c
@@ -620,11 +620,13 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
                          ) / sizeof(efi_ip_addr_t);
                format(buf, size, off, "Dns", "Dns(");
                for (int i=0; i < end; i++) {
-                       const efi_ip_addr_t *addr = &dp->dns.addrs[i];
+                       efi_ip_addr_t addr;
+
+                       memcpy(&addr, &dp->dns.addrs[i], sizeof(addr));
                        if (i != 0)
                                format(buf, size, off, "Dns", ",");
                        format_ip_addr(buf, size, off, "Dns",
-                                      dp->dns.is_ipv6, addr);
+                                      dp->dns.is_ipv6, &addr);
                }
                format(buf, size, off, "Dns", ")");
                break;
diff --git a/src/dp.h b/src/dp.h
index 20cb608..1f921d5 100644
--- a/src/dp.h
+++ b/src/dp.h
@@ -71,13 +71,9 @@
                int _rc;                                                \
                char *_guidstr = NULL;                                  \
                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));           \
+               const efi_guid_t * const _guid_p = &_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",  \
@@ -86,7 +82,7 @@
                        _guidstr = onstack(_guidstr,                    \
                                           strlen(_guidstr)+1);         \
                        _rc = format(buf, size, off, dp_type, "%s",     \
-                                    _guidstr); \
+                                    _guidstr);                         \
                }                                                       \
                _rc;                                                    \
        })
diff --git a/src/guid.c b/src/guid.c
index 306c9ff..3156b3b 100644
--- a/src/guid.c
+++ b/src/guid.c
@@ -31,7 +31,7 @@
 extern const efi_guid_t efi_guid_zero;
 
 int NONNULL(1, 2) PUBLIC
-efi_guid_cmp(const efi_guid_t *a, const efi_guid_t *b)
+efi_guid_cmp(const void * const a, const void * const b)
 {
        return memcmp(a, b, sizeof (efi_guid_t));
 }
diff --git a/src/include/efivar/efivar.h b/src/include/efivar/efivar.h
index 316891c..ad6449d 100644
--- a/src/include/efivar/efivar.h
+++ b/src/include/efivar/efivar.h
@@ -128,7 +128,7 @@ extern int efi_symbol_to_guid(const char *symbol, 
efi_guid_t *guid)
 
 extern int efi_guid_is_zero(const efi_guid_t *guid);
 extern int efi_guid_is_empty(const efi_guid_t *guid);
-extern int efi_guid_cmp(const efi_guid_t *a, const efi_guid_t *b);
+extern int efi_guid_cmp(const void * const a, const void * const b);
 
 /* import / export functions */
 typedef struct efi_variable efi_variable_t;
diff --git a/src/ucs2.h b/src/ucs2.h
index dbb5900..edd8367 100644
--- a/src/ucs2.h
+++ b/src/ucs2.h
@@ -23,16 +23,21 @@
        (((val) & ((mask) << (shift))) >> (shift))
 
 static inline size_t UNUSED
-ucs2len(const uint16_t * const s, ssize_t limit)
+ucs2len(const void *vs, ssize_t limit)
 {
        ssize_t i;
-       for (i = 0; i < (limit >= 0 ? limit : i+1) && s[i] != (uint16_t)0; i++)
+       const uint16_t *s = vs;
+       const uint8_t *s8 = vs;
+
+       for (i = 0;
+            i < (limit >= 0 ? limit : i+1) && s8[0] != 0 && s8[1] != 0;
+            i++, s8 += 2, s++)
                ;
        return i;
 }
 
 static inline size_t UNUSED
-ucs2size(const uint16_t * const s, ssize_t limit)
+ucs2size(const void *s, ssize_t limit)
 {
        size_t rc = ucs2len(s, limit);
        rc *= sizeof (uint16_t);
@@ -69,10 +74,11 @@ utf8size(uint8_t *s, ssize_t limit)
 }
 
 static inline unsigned char * UNUSED
-ucs2_to_utf8(const uint16_t * const chars, ssize_t limit)
+ucs2_to_utf8(const void * const voidchars, ssize_t limit)
 {
        ssize_t i, j;
        unsigned char *ret;
+       const uint16_t * const chars = voidchars;
 
        if (limit < 0)
                limit = ucs2len(chars, -1);
@@ -124,10 +130,12 @@ ucs2_to_utf8(const uint16_t * const chars, ssize_t limit)
 }
 
 static inline ssize_t UNUSED NONNULL(4)
-utf8_to_ucs2(uint16_t *ucs2, ssize_t size, int terminate, uint8_t *utf8)
+utf8_to_ucs2(void *ucs2void, ssize_t size, int terminate, uint8_t *utf8)
 {
        ssize_t req;
        ssize_t i, j;
+       uint16_t *ucs2 = ucs2void;
+       uint16_t val16;
 
        if (!ucs2 && size > 0) {
                errno = EINVAL;
@@ -162,10 +170,13 @@ utf8_to_ucs2(uint16_t *ucs2, ssize_t size, int terminate, 
uint8_t *utf8)
                        val = utf8[i] & 0x7f;
                        i += 1;
                }
-               ucs2[j] = val;
+               val16 = val;
+               ucs2[j] = val16;
+       }
+       if (terminate) {
+               val16 = 0;
+               ucs2[j++] = val16;
        }
-       if (terminate)
-               ucs2[j++] = (uint16_t)0;
        return j;
 };
 
-- 
2.20.1

++++++ efivar-make-format_guid-handle-misaligned-guid-pointer.patch ++++++
>From b98ba8921010d03f46704a476c69861515deb1ca Mon Sep 17 00:00:00 2001
From: Peter Jones <[email protected]>
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 <[email protected]>
---
 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);                             \
-- 
2.20.1

++++++ libefiboot-export-disk_get_partition_info.patch ++++++
--- /var/tmp/diff_new_pack.YhJbE1/_old  2019-02-26 22:14:06.914238329 +0100
+++ /var/tmp/diff_new_pack.YhJbE1/_new  2019-02-26 22:14:06.926238325 +0100
@@ -1,9 +1,9 @@
-Index: efivar-35/src/disk.c
+Index: efivar-37/src/disk.c
 ===================================================================
---- efivar-35.orig/src/disk.c
-+++ efivar-35/src/disk.c
-@@ -248,6 +248,33 @@ get_partition_info(int fd, uint32_t opti
-       return rc;
+--- efivar-37.orig/src/disk.c
++++ efivar-37/src/disk.c
+@@ -256,6 +256,33 @@ is_partitioned(int fd)
+       return true;
  }
  
 +/*
@@ -15,7 +15,7 @@
 + *  @signature - partition signature returned
 + *  @mbr_type  - partition type returned
 + *  @signature_type - signature type returned
-+ * 
++ *
 + *  Description: Finds partition table info for given partition on given disk.
 + *               Both GPT and MSDOS partition tables are tested for.
 + *  Returns 0 on success, non-zero on failure
@@ -23,7 +23,7 @@
 +int
 +__attribute__((__nonnull__ (3,4,5,6,7)))
 +__attribute__((__visibility__ ("default")))
-+efi_disk_get_partition_info (int fd, 
++efi_disk_get_partition_info (int fd,
 +                         uint32_t part,
 +                         uint64_t *start, uint64_t *size,
 +                         uint8_t *signature,
@@ -33,13 +33,13 @@
 +                        start, size, signature, mbr_type, signature_type);
 +}
 +
- ssize_t
- __attribute__((__visibility__ ("hidden")))
- _make_hd_dn(uint8_t *buf, ssize_t size, int fd, uint32_t partition,
-Index: efivar-35/src/include/efivar/efiboot-disk.h
+ ssize_t HIDDEN
+ make_hd_dn(uint8_t *buf, ssize_t size, int fd, int32_t partition,
+            uint32_t options)
+Index: efivar-37/src/include/efivar/efiboot-disk.h
 ===================================================================
 --- /dev/null
-+++ efivar-35/src/include/efivar/efiboot-disk.h
++++ efivar-37/src/include/efivar/efiboot-disk.h
 @@ -0,0 +1,32 @@
 +/*
 + * libefiboot - library for the manipulation of EFI boot variables
@@ -64,7 +64,7 @@
 +#ifndef _EFIBOOT_BOOT_H
 +#define _EFIBOOT_BOOT_H 1
 +
-+extern int efi_disk_get_partition_info (int fd, 
++extern int efi_disk_get_partition_info (int fd,
 +                         uint32_t part,
 +                         uint64_t *start, uint64_t *size,
 +                         uint8_t *signature,
@@ -73,10 +73,10 @@
 +      __attribute__((__visibility__ ("default")));
 +
 +#endif /* _EFIBOOT_BOOT_H */
-Index: efivar-35/src/include/efivar/efiboot.h
+Index: efivar-37/src/include/efivar/efiboot.h
 ===================================================================
---- efivar-35.orig/src/include/efivar/efiboot.h
-+++ efivar-35/src/include/efivar/efiboot.h
+--- efivar-37.orig/src/include/efivar/efiboot.h
++++ efivar-37/src/include/efivar/efiboot.h
 @@ -34,5 +34,6 @@
  
  #include <efivar/efiboot-creator.h>
@@ -84,10 +84,10 @@
 +#include <efivar/efiboot-disk.h>
  
  #endif /* EFIBOOT_H */
-Index: efivar-35/src/libefiboot.map.in
+Index: efivar-37/src/libefiboot.map.in
 ===================================================================
---- efivar-35.orig/src/libefiboot.map.in
-+++ efivar-35/src/libefiboot.map.in
+--- efivar-37.orig/src/libefiboot.map.in
++++ efivar-37/src/libefiboot.map.in
 @@ -33,3 +33,7 @@ LIBEFIBOOT_1.29 {
  
  LIBEFIBOOT_1.30 {


Reply via email to