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