Blame SOURCES/kvm-misc-Replace-zero-length-arrays-with-flexible-array-.patch

a19a21
From 67878e1306f9ea6ccd30437327147c46de196a36 Mon Sep 17 00:00:00 2001
a19a21
From: Thomas Huth <thuth@redhat.com>
a19a21
Date: Wed, 11 Nov 2020 12:03:13 -0500
a19a21
Subject: [PATCH 13/18] misc: Replace zero-length arrays with flexible array
a19a21
 member (manual)
a19a21
MIME-Version: 1.0
a19a21
Content-Type: text/plain; charset=UTF-8
a19a21
Content-Transfer-Encoding: 8bit
a19a21
a19a21
RH-Author: Thomas Huth <thuth@redhat.com>
a19a21
Message-id: <20201111120316.707489-10-thuth@redhat.com>
a19a21
Patchwork-id: 99506
a19a21
O-Subject: [RHEL-8.4.0 qemu-kvm PATCH v2 09/12] misc: Replace zero-length arrays with flexible array member (manual)
a19a21
Bugzilla: 1798506
a19a21
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
a19a21
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
a19a21
RH-Acked-by: David Hildenbrand <david@redhat.com>
a19a21
a19a21
From: Philippe Mathieu-Daudé <philmd@redhat.com>
a19a21
a19a21
Description copied from Linux kernel commit from Gustavo A. R. Silva
a19a21
(see [3]):
a19a21
a19a21
--v-- description start --v--
a19a21
a19a21
  The current codebase makes use of the zero-length array language
a19a21
  extension to the C90 standard, but the preferred mechanism to
a19a21
  declare variable-length types such as these ones is a flexible
a19a21
  array member [1], introduced in C99:
a19a21
a19a21
  struct foo {
a19a21
      int stuff;
a19a21
      struct boo array[];
a19a21
  };
a19a21
a19a21
  By making use of the mechanism above, we will get a compiler
a19a21
  warning in case the flexible array does not occur last in the
a19a21
  structure, which will help us prevent some kind of undefined
a19a21
  behavior bugs from being unadvertenly introduced [2] to the
a19a21
  Linux codebase from now on.
a19a21
a19a21
--^-- description end --^--
a19a21
a19a21
Do the similar housekeeping in the QEMU codebase (which uses
a19a21
C99 since commit 7be41675f7cb).
a19a21
a19a21
All these instances of code were found with the help of the
a19a21
following command (then manual analysis, without modifying
a19a21
structures only having a single flexible array member, such
a19a21
QEDTable in block/qed.h):
a19a21
a19a21
  git grep -F '[0];'
a19a21
a19a21
[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
a19a21
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76497732932f
a19a21
[3] https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git/commit/?id=17642a2fbd2c1
a19a21
a19a21
Inspired-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
a19a21
Reviewed-by: David Hildenbrand <david@redhat.com>
a19a21
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
a19a21
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
a19a21
(cherry picked from commit 880a7817c1a82a93d3f83dfb25dce1f0db629c66)
a19a21
Signed-off-by: Thomas Huth <thuth@redhat.com>
a19a21
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
a19a21
---
a19a21
 block/vmdk.c                      | 2 +-
a19a21
 docs/interop/vhost-user.rst       | 4 ++--
a19a21
 hw/char/sclpconsole-lm.c          | 2 +-
a19a21
 hw/char/sclpconsole.c             | 2 +-
a19a21
 hw/s390x/virtio-ccw.c             | 2 +-
a19a21
 include/hw/acpi/acpi-defs.h       | 4 ++--
a19a21
 include/hw/boards.h               | 2 +-
a19a21
 include/hw/s390x/event-facility.h | 2 +-
a19a21
 include/hw/s390x/sclp.h           | 8 ++++----
a19a21
 target/s390x/ioinst.c             | 2 +-
a19a21
 10 files changed, 15 insertions(+), 15 deletions(-)
a19a21
a19a21
diff --git a/block/vmdk.c b/block/vmdk.c
a19a21
index 1bd39917290..8ec18f35a53 100644
a19a21
--- a/block/vmdk.c
a19a21
+++ b/block/vmdk.c
a19a21
@@ -187,7 +187,7 @@ typedef struct VmdkMetaData {
a19a21
 typedef struct VmdkGrainMarker {
a19a21
     uint64_t lba;
a19a21
     uint32_t size;
a19a21
-    uint8_t  data[0];
a19a21
+    uint8_t  data[];
a19a21
 } QEMU_PACKED VmdkGrainMarker;
a19a21
 
a19a21
 enum {
a19a21
diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst
a19a21
index 7827b710aa0..71b20ce83dd 100644
a19a21
--- a/docs/interop/vhost-user.rst
a19a21
+++ b/docs/interop/vhost-user.rst
a19a21
@@ -563,7 +563,7 @@ For split virtqueue, queue region can be implemented as:
a19a21
       uint16_t used_idx;
a19a21
 
a19a21
       /* Used to track the state of each descriptor in descriptor table */
a19a21
-      DescStateSplit desc[0];
a19a21
+      DescStateSplit desc[];
a19a21
   } QueueRegionSplit;
a19a21
 
a19a21
 To track inflight I/O, the queue region should be processed as follows:
a19a21
@@ -685,7 +685,7 @@ For packed virtqueue, queue region can be implemented as:
a19a21
       uint8_t padding[7];
a19a21
 
a19a21
       /* Used to track the state of each descriptor fetched from descriptor ring */
a19a21
-      DescStatePacked desc[0];
a19a21
+      DescStatePacked desc[];
a19a21
   } QueueRegionPacked;
a19a21
 
a19a21
 To track inflight I/O, the queue region should be processed as follows:
a19a21
diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
a19a21
index 392606259d5..a9a6f2b204c 100644
a19a21
--- a/hw/char/sclpconsole-lm.c
a19a21
+++ b/hw/char/sclpconsole-lm.c
a19a21
@@ -31,7 +31,7 @@
a19a21
 typedef struct OprtnsCommand {
a19a21
     EventBufferHeader header;
a19a21
     MDMSU message_unit;
a19a21
-    char data[0];
a19a21
+    char data[];
a19a21
 } QEMU_PACKED OprtnsCommand;
a19a21
 
a19a21
 /* max size for line-mode data in 4K SCCB page */
a19a21
diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
a19a21
index da126f0133f..55697130a0a 100644
a19a21
--- a/hw/char/sclpconsole.c
a19a21
+++ b/hw/char/sclpconsole.c
a19a21
@@ -25,7 +25,7 @@
a19a21
 
a19a21
 typedef struct ASCIIConsoleData {
a19a21
     EventBufferHeader ebh;
a19a21
-    char data[0];
a19a21
+    char data[];
a19a21
 } QEMU_PACKED ASCIIConsoleData;
a19a21
 
a19a21
 /* max size for ASCII data in 4K SCCB page */
a19a21
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
a19a21
index 6580ce5907d..aa2c75a49c6 100644
a19a21
--- a/hw/s390x/virtio-ccw.c
a19a21
+++ b/hw/s390x/virtio-ccw.c
a19a21
@@ -193,7 +193,7 @@ typedef struct VirtioThinintInfo {
a19a21
 typedef struct VirtioRevInfo {
a19a21
     uint16_t revision;
a19a21
     uint16_t length;
a19a21
-    uint8_t data[0];
a19a21
+    uint8_t data[];
a19a21
 } QEMU_PACKED VirtioRevInfo;
a19a21
 
a19a21
 /* Specify where the virtqueues for the subchannel are in guest memory. */
a19a21
diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h
a19a21
index 57a3f58b0c9..b80188b430f 100644
a19a21
--- a/include/hw/acpi/acpi-defs.h
a19a21
+++ b/include/hw/acpi/acpi-defs.h
a19a21
@@ -152,7 +152,7 @@ typedef struct AcpiSerialPortConsoleRedirection
a19a21
  */
a19a21
 struct AcpiRsdtDescriptorRev1 {
a19a21
     ACPI_TABLE_HEADER_DEF       /* ACPI common table header */
a19a21
-    uint32_t table_offset_entry[0];  /* Array of pointers to other */
a19a21
+    uint32_t table_offset_entry[];  /* Array of pointers to other */
a19a21
     /* ACPI tables */
a19a21
 } QEMU_PACKED;
a19a21
 typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1;
a19a21
@@ -162,7 +162,7 @@ typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1;
a19a21
  */
a19a21
 struct AcpiXsdtDescriptorRev2 {
a19a21
     ACPI_TABLE_HEADER_DEF       /* ACPI common table header */
a19a21
-    uint64_t table_offset_entry[0];  /* Array of pointers to other */
a19a21
+    uint64_t table_offset_entry[];  /* Array of pointers to other */
a19a21
     /* ACPI tables */
a19a21
 } QEMU_PACKED;
a19a21
 typedef struct AcpiXsdtDescriptorRev2 AcpiXsdtDescriptorRev2;
a19a21
diff --git a/include/hw/boards.h b/include/hw/boards.h
a19a21
index 2920bdef5b4..a5e92f6c373 100644
a19a21
--- a/include/hw/boards.h
a19a21
+++ b/include/hw/boards.h
a19a21
@@ -101,7 +101,7 @@ typedef struct CPUArchId {
a19a21
  */
a19a21
 typedef struct {
a19a21
     int len;
a19a21
-    CPUArchId cpus[0];
a19a21
+    CPUArchId cpus[];
a19a21
 } CPUArchIdList;
a19a21
 
a19a21
 /**
a19a21
diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h
a19a21
index bdc32a3c091..700a610f33c 100644
a19a21
--- a/include/hw/s390x/event-facility.h
a19a21
+++ b/include/hw/s390x/event-facility.h
a19a21
@@ -122,7 +122,7 @@ typedef struct MDBO {
a19a21
 
a19a21
 typedef struct MDB {
a19a21
     MdbHeader header;
a19a21
-    MDBO mdbo[0];
a19a21
+    MDBO mdbo[];
a19a21
 } QEMU_PACKED MDB;
a19a21
 
a19a21
 typedef struct SclpMsg {
a19a21
diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
a19a21
index df2fa4169b0..62e2aa1d9f1 100644
a19a21
--- a/include/hw/s390x/sclp.h
a19a21
+++ b/include/hw/s390x/sclp.h
a19a21
@@ -133,7 +133,7 @@ typedef struct ReadInfo {
a19a21
     uint16_t highest_cpu;
a19a21
     uint8_t  _reserved5[124 - 122];     /* 122-123 */
a19a21
     uint32_t hmfai;
a19a21
-    struct CPUEntry entries[0];
a19a21
+    struct CPUEntry entries[];
a19a21
 } QEMU_PACKED ReadInfo;
a19a21
 
a19a21
 typedef struct ReadCpuInfo {
a19a21
@@ -143,7 +143,7 @@ typedef struct ReadCpuInfo {
a19a21
     uint16_t nr_standby;            /* 12-13 */
a19a21
     uint16_t offset_standby;        /* 14-15 */
a19a21
     uint8_t reserved0[24-16];       /* 16-23 */
a19a21
-    struct CPUEntry entries[0];
a19a21
+    struct CPUEntry entries[];
a19a21
 } QEMU_PACKED ReadCpuInfo;
a19a21
 
a19a21
 typedef struct ReadStorageElementInfo {
a19a21
@@ -152,7 +152,7 @@ typedef struct ReadStorageElementInfo {
a19a21
     uint16_t assigned;
a19a21
     uint16_t standby;
a19a21
     uint8_t _reserved0[16 - 14]; /* 14-15 */
a19a21
-    uint32_t entries[0];
a19a21
+    uint32_t entries[];
a19a21
 } QEMU_PACKED ReadStorageElementInfo;
a19a21
 
a19a21
 typedef struct AttachStorageElement {
a19a21
@@ -160,7 +160,7 @@ typedef struct AttachStorageElement {
a19a21
     uint8_t _reserved0[10 - 8];  /* 8-9 */
a19a21
     uint16_t assigned;
a19a21
     uint8_t _reserved1[16 - 12]; /* 12-15 */
a19a21
-    uint32_t entries[0];
a19a21
+    uint32_t entries[];
a19a21
 } QEMU_PACKED AttachStorageElement;
a19a21
 
a19a21
 typedef struct AssignStorage {
a19a21
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
a19a21
index b6be300cc48..a412926d278 100644
a19a21
--- a/target/s390x/ioinst.c
a19a21
+++ b/target/s390x/ioinst.c
a19a21
@@ -387,7 +387,7 @@ typedef struct ChscResp {
a19a21
     uint16_t len;
a19a21
     uint16_t code;
a19a21
     uint32_t param;
a19a21
-    char data[0];
a19a21
+    char data[];
a19a21
 } QEMU_PACKED ChscResp;
a19a21
 
a19a21
 #define CHSC_MIN_RESP_LEN 0x0008
a19a21
-- 
a19a21
2.27.0
a19a21