From cfa50a2139dcb2c22e6ad7d3f07625caed65219e Mon Sep 17 00:00:00 2001 From: Victor Toso Date: Fri, 13 Jul 2018 15:31:22 +0200 Subject: [PATCH] Avoid compilers detect misaligned access Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1565766 Signed-off-by: Victor Toso --- 0001-qxl_dev-Align-QXLRam-to-4-bytes.patch | 75 ++++++++++++++++++++++ spice-protocol.spec | 9 ++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 0001-qxl_dev-Align-QXLRam-to-4-bytes.patch diff --git a/0001-qxl_dev-Align-QXLRam-to-4-bytes.patch b/0001-qxl_dev-Align-QXLRam-to-4-bytes.patch new file mode 100644 index 0000000..c1d3253 --- /dev/null +++ b/0001-qxl_dev-Align-QXLRam-to-4-bytes.patch @@ -0,0 +1,75 @@ +From beda5ec7a6848be20c0cac2a9a8ef2a41e8069c1 Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Thu, 28 Jun 2018 21:30:21 +0100 +Subject: [PATCH] qxl_dev: Align QXLRam to 4 bytes + +This avoids compilers detect misaligned access which can lead to +warnings. +In QEMU the structure is allocated at the beginning of a 4Kb page, +in Xspice is allocated with a calloc, so the structure will end up 4 +bytes aligned as well with these users. We are not aware of other users +of QXLRam, but if there was, it's likely the struct would be at least +naturally aligned, so this change should not impact anyone. +Aligning to 4 bytes maintains the size of the structure unchanged +avoiding possible ABI changes. +clang currently generates an invalid function call if a misaligned +4 byte atomic operation is detected. + +This fixes https://bugzilla.redhat.com/show_bug.cgi?id=1565766 + +Signed-off-by: Frediano Ziglio +Acked-by: Christophe Fergeau +--- + spice/end-packed.h | 1 + + spice/qxl_dev.h | 2 +- + spice/start-packed.h | 2 ++ + 3 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/spice/end-packed.h b/spice/end-packed.h +index 1acea18..0efd588 100644 +--- a/spice/end-packed.h ++++ b/spice/end-packed.h +@@ -32,6 +32,7 @@ + /* See start-packed.h for details */ + + #undef SPICE_ATTR_PACKED ++#undef SPICE_ATTR_ALIGNED + + #if defined(__MINGW32__) || !defined(__GNUC__) + #pragma pack(pop) +diff --git a/spice/qxl_dev.h b/spice/qxl_dev.h +index 9e753c4..a9cc4f4 100644 +--- a/spice/qxl_dev.h ++++ b/spice/qxl_dev.h +@@ -253,7 +253,7 @@ SPICE_RING_DECLARE(QXLReleaseRing, uint64_t, QXL_RELEASE_RING_SIZE); + #define QXL_INTERRUPT_CLIENT_MONITORS_CONFIG (1 << 5) + + /* qxl-1 compat: append only */ +-typedef struct SPICE_ATTR_PACKED QXLRam { ++typedef struct SPICE_ATTR_ALIGNED(4) SPICE_ATTR_PACKED QXLRam { + uint32_t magic; + uint32_t int_pending; + uint32_t int_mask; +diff --git a/spice/start-packed.h b/spice/start-packed.h +index ab3fa98..de0c595 100644 +--- a/spice/start-packed.h ++++ b/spice/start-packed.h +@@ -48,6 +48,7 @@ + #ifdef __GNUC__ + + #define SPICE_ATTR_PACKED __attribute__ ((__packed__)) ++#define SPICE_ATTR_ALIGNED(n) __attribute__ ((__aligned__ (n))) + + #ifdef __MINGW32__ + #pragma pack(push,1) +@@ -58,6 +59,7 @@ + #pragma pack(push) + #pragma pack(1) + #define SPICE_ATTR_PACKED ++#define SPICE_ATTR_ALIGNED(n) __declspec (align (n)) + #pragma warning(disable:4200) + #pragma warning(disable:4103) + +-- +2.17.1 + diff --git a/spice-protocol.spec b/spice-protocol.spec index 199f67a..9e55316 100644 --- a/spice-protocol.spec +++ b/spice-protocol.spec @@ -1,12 +1,13 @@ Name: spice-protocol Version: 0.12.14 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Spice protocol header files Group: Development/Libraries # Main headers are BSD, controller / foreign menu are LGPL License: BSD and LGPLv2+ URL: http://www.spice-space.org/ Source0: http://www.spice-space.org/download/releases/%{name}-%{version}.tar.bz2 +Patch0001: 0001-qxl_dev-Align-QXLRam-to-4-bytes.patch BuildArch: noarch %description @@ -17,6 +18,8 @@ and the para-virtual graphics card QXL. %prep %setup -q +%patch0001 -p1 + %build %configure make %{?_smp_mflags} @@ -32,6 +35,10 @@ make DESTDIR=%{buildroot} install %changelog +* Fri Jul 13 2018 Victor Toso - 0.12.14-2 +- Align QXLRam to 4 bytes to avoid compilers detect misaligned access + Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1565766 + * Thu Jun 07 2018 Christophe Fergeau - 0.12.14-1 - Update to 0.12.14 release