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