On Tue, Jul 25, 2023 at 09:13:26AM -0700, James Seo wrote: > These old-style 1-length variable arrays can be directly converted > into C99 flexible array members without any binary changes. > > In most cases, they belong to unused structs, or to structs used only > by unused code. The remaining few coincidentally have their sizes > calculated in roundabout ways that do not depend on the sizeof() > their structs. > > Signed-off-by: James Seo <james@xxxxxxxxxx> Thanks for tackling these fixes! Doing before/after build testing[1] shows no binary differences with that patch. Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -Kees [1] https://outflux.net/blog/archives/2022/06/24/finding-binary-differences/ > --- > drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 181 ++++++++------------------ > drivers/scsi/mpt3sas/mpi/mpi2_image.h | 32 ++--- > drivers/scsi/mpt3sas/mpi/mpi2_ioc.h | 27 ++-- > 3 files changed, 75 insertions(+), 165 deletions(-) > > diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h > index 4d0be5ab98c1..42d820159c44 100644 > --- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h > +++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h > @@ -643,18 +643,14 @@ typedef struct _MPI2_CHIP_REVISION_ID { > /*Manufacturing Page 2 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check Header.PageLength at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check Header.PageLength at > + *runtime before using HwSettings[]. > */ > -#ifndef MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS > -#define MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_MAN_2 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > MPI2_CHIP_REVISION_ID ChipId; /*0x04 */ > - U32 > - HwSettings[MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS];/*0x08 */ > + U32 HwSettings[]; /*0x08 */ > } MPI2_CONFIG_PAGE_MAN_2, > *PTR_MPI2_CONFIG_PAGE_MAN_2, > Mpi2ManufacturingPage2_t, > @@ -666,18 +662,14 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_2 { > /*Manufacturing Page 3 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check Header.PageLength at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check Header.PageLength at > + *runtime before using Info[]. > */ > -#ifndef MPI2_MAN_PAGE_3_INFO_WORDS > -#define MPI2_MAN_PAGE_3_INFO_WORDS (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_MAN_3 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > MPI2_CHIP_REVISION_ID ChipId; /*0x04 */ > - U32 > - Info[MPI2_MAN_PAGE_3_INFO_WORDS];/*0x08 */ > + U32 Info[]; /*0x08 */ > } MPI2_CONFIG_PAGE_MAN_3, > *PTR_MPI2_CONFIG_PAGE_MAN_3, > Mpi2ManufacturingPage3_t, > @@ -765,12 +757,9 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_4 { > /*Manufacturing Page 5 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhys at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhys at runtime before using Phy[]. > */ > -#ifndef MPI2_MAN_PAGE_5_PHY_ENTRIES > -#define MPI2_MAN_PAGE_5_PHY_ENTRIES (1) > -#endif > > typedef struct _MPI2_MANUFACTURING5_ENTRY { > U64 WWID; /*0x00 */ > @@ -787,8 +776,7 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_5 { > U16 Reserved2; /*0x06 */ > U32 Reserved3; /*0x08 */ > U32 Reserved4; /*0x0C */ > - MPI2_MANUFACTURING5_ENTRY > - Phy[MPI2_MAN_PAGE_5_PHY_ENTRIES];/*0x08 */ > + MPI2_MANUFACTURING5_ENTRY Phy[]; /*0x10 */ > } MPI2_CONFIG_PAGE_MAN_5, > *PTR_MPI2_CONFIG_PAGE_MAN_5, > Mpi2ManufacturingPage5_t, > @@ -864,12 +852,9 @@ typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO { > #define MPI2_MANPAGE7_SLOT_UNKNOWN (0xFFFF) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhys at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhys at runtime before using ConnectorInfo[]. > */ > -#ifndef MPI2_MANPAGE7_CONNECTOR_INFO_MAX > -#define MPI2_MANPAGE7_CONNECTOR_INFO_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_MAN_7 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > @@ -880,8 +865,7 @@ typedef struct _MPI2_CONFIG_PAGE_MAN_7 { > U8 NumPhys; /*0x20 */ > U8 Reserved3; /*0x21 */ > U16 Reserved4; /*0x22 */ > - MPI2_MANPAGE7_CONNECTOR_INFO > - ConnectorInfo[MPI2_MANPAGE7_CONNECTOR_INFO_MAX]; /*0x24 */ > + MPI2_MANPAGE7_CONNECTOR_INFO ConnectorInfo[]; /*0x24 */ > } MPI2_CONFIG_PAGE_MAN_7, > *PTR_MPI2_CONFIG_PAGE_MAN_7, > Mpi2ManufacturingPage7_t, > @@ -1019,12 +1003,9 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_3 { > /*IO Unit Page 5 */ > > /* > - *Upper layer code (drivers, utilities, etc.) should leave this define set to > - *one and check the value returned for NumDmaEngines at runtime. > + *Upper layer code (drivers, utilities, etc.) should check the value returned > + *for NumDmaEngines at runtime before using DmaEngineCapabilities[]. > */ > -#ifndef MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES > -#define MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > @@ -1042,7 +1023,7 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 { > U32 Reserved2; /*0x24 */ > U32 Reserved3; /*0x28 */ > U32 > - DmaEngineCapabilities[MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES]; /*0x2C */ > + DmaEngineCapabilities[]; /*0x2C */ > } MPI2_CONFIG_PAGE_IO_UNIT_5, > *PTR_MPI2_CONFIG_PAGE_IO_UNIT_5, > Mpi2IOUnitPage5_t, *pMpi2IOUnitPage5_t; > @@ -1259,12 +1240,9 @@ typedef struct _MPI2_IOUNIT9_SENSOR { > #define MPI2_IOUNIT9_SENSOR_FLAGS_TEMP_VALID (0x01) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumSensors at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumSensors at runtime before using Sensor[]. > */ > -#ifndef MPI2_IOUNITPAGE9_SENSOR_ENTRIES > -#define MPI2_IOUNITPAGE9_SENSOR_ENTRIES (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_9 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > @@ -1273,8 +1251,7 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_9 { > U8 NumSensors; /*0x0C */ > U8 Reserved4; /*0x0D */ > U16 Reserved3; /*0x0E */ > - MPI2_IOUNIT9_SENSOR > - Sensor[MPI2_IOUNITPAGE9_SENSOR_ENTRIES];/*0x10 */ > + MPI2_IOUNIT9_SENSOR Sensor[]; /*0x10 */ > } MPI2_CONFIG_PAGE_IO_UNIT_9, > *PTR_MPI2_CONFIG_PAGE_IO_UNIT_9, > Mpi2IOUnitPage9_t, *pMpi2IOUnitPage9_t; > @@ -1294,12 +1271,9 @@ typedef struct _MPI2_IOUNIT10_FUNCTION { > *pMpi2IOUnit10Function_t; > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumFunctions at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumFunctions at runtime before using Function[]. > */ > -#ifndef MPI2_IOUNITPAGE10_FUNCTION_ENTRIES > -#define MPI2_IOUNITPAGE10_FUNCTION_ENTRIES (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_10 { > MPI2_CONFIG_PAGE_HEADER Header; /*0x00 */ > @@ -1308,8 +1282,7 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_10 { > U16 Reserved2; /*0x06 */ > U32 Reserved3; /*0x08 */ > U32 Reserved4; /*0x0C */ > - MPI2_IOUNIT10_FUNCTION > - Function[MPI2_IOUNITPAGE10_FUNCTION_ENTRIES];/*0x10 */ > + MPI2_IOUNIT10_FUNCTION Function[]; /*0x10 */ > } MPI2_CONFIG_PAGE_IO_UNIT_10, > *PTR_MPI2_CONFIG_PAGE_IO_UNIT_10, > Mpi2IOUnitPage10_t, *pMpi2IOUnitPage10_t; > @@ -1764,12 +1737,9 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_3 { > /*BIOS Page 4 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhys at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhys at runtime before using Phy[]. > */ > -#ifndef MPI2_BIOS_PAGE_4_PHY_ENTRIES > -#define MPI2_BIOS_PAGE_4_PHY_ENTRIES (1) > -#endif > > typedef struct _MPI2_BIOS4_ENTRY { > U64 ReassignmentWWID; /*0x00 */ > @@ -1782,8 +1752,7 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_4 { > U8 NumPhys; /*0x04 */ > U8 Reserved1; /*0x05 */ > U16 Reserved2; /*0x06 */ > - MPI2_BIOS4_ENTRY > - Phy[MPI2_BIOS_PAGE_4_PHY_ENTRIES]; /*0x08 */ > + MPI2_BIOS4_ENTRY Phy[]; /*0x08 */ > } MPI2_CONFIG_PAGE_BIOS_4, *PTR_MPI2_CONFIG_PAGE_BIOS_4, > Mpi2BiosPage4_t, *pMpi2BiosPage4_t; > > @@ -2045,12 +2014,9 @@ typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_0 { > /*RAID Physical Disk Page 1 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhysDiskPaths at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhysDiskPaths at runtime before using PhysicalDiskPath[]. > */ > -#ifndef MPI2_RAID_PHYS_DISK1_PATH_MAX > -#define MPI2_RAID_PHYS_DISK1_PATH_MAX (1) > -#endif > > typedef struct _MPI2_RAIDPHYSDISK1_PATH { > U16 DevHandle; /*0x00 */ > @@ -2075,8 +2041,7 @@ typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_1 { > U8 PhysDiskNum; /*0x05 */ > U16 Reserved1; /*0x06 */ > U32 Reserved2; /*0x08 */ > - MPI2_RAIDPHYSDISK1_PATH > - PhysicalDiskPath[MPI2_RAID_PHYS_DISK1_PATH_MAX];/*0x0C */ > + MPI2_RAIDPHYSDISK1_PATH PhysicalDiskPath[]; /*0x0C */ > } MPI2_CONFIG_PAGE_RD_PDISK_1, > *PTR_MPI2_CONFIG_PAGE_RD_PDISK_1, > Mpi2RaidPhysDiskPage1_t, > @@ -2502,12 +2467,9 @@ typedef struct _MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS { > #define MPI2_SASIOUNIT5_ITE_ONE_MICROSECOND (0) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhys at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhys at runtime before using SASPhyPowerManagementSettings[]. > */ > -#ifndef MPI2_SAS_IOUNIT5_PHY_MAX > -#define MPI2_SAS_IOUNIT5_PHY_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -2516,7 +2478,7 @@ typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 { > U16 Reserved2;/*0x0A */ > U32 Reserved3;/*0x0C */ > MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS > - SASPhyPowerManagementSettings[MPI2_SAS_IOUNIT5_PHY_MAX];/*0x10 */ > + SASPhyPowerManagementSettings[]; /*0x10 */ > } MPI2_CONFIG_PAGE_SASIOUNIT_5, > *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_5, > Mpi2SasIOUnitPage5_t, *pMpi2SasIOUnitPage5_t; > @@ -2554,12 +2516,9 @@ typedef struct _MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS { > #define MPI2_SASIOUNIT6_MODULATION_100_PERCENT (0x03) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumGroups at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumGroups at runtime before using PortWidthModulationGroupStatus[]. > */ > -#ifndef MPI2_SAS_IOUNIT6_GROUP_MAX > -#define MPI2_SAS_IOUNIT6_GROUP_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_6 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -2569,7 +2528,7 @@ typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_6 { > U8 Reserved3; /*0x11 */ > U16 Reserved4; /*0x12 */ > MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS > - PortWidthModulationGroupStatus[MPI2_SAS_IOUNIT6_GROUP_MAX]; /*0x14 */ > + PortWidthModulationGroupStatus[]; /*0x14 */ > } MPI2_CONFIG_PAGE_SASIOUNIT_6, > *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_6, > Mpi2SasIOUnitPage6_t, *pMpi2SasIOUnitPage6_t; > @@ -2597,12 +2556,9 @@ typedef struct _MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS { > > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumGroups at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumGroups at runtime before using PortWidthModulationGroupSettings[]. > */ > -#ifndef MPI2_SAS_IOUNIT7_GROUP_MAX > -#define MPI2_SAS_IOUNIT7_GROUP_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_7 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -2615,7 +2571,7 @@ typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_7 { > U8 Reserved4; /*0x15 */ > U16 Reserved5; /*0x16 */ > MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS > - PortWidthModulationGroupSettings[MPI2_SAS_IOUNIT7_GROUP_MAX];/*0x18 */ > + PortWidthModulationGroupSettings[]; /*0x18 */ > } MPI2_CONFIG_PAGE_SASIOUNIT_7, > *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_7, > Mpi2SasIOUnitPage7_t, *pMpi2SasIOUnitPage7_t; > @@ -3086,12 +3042,9 @@ typedef struct _MPI2_SASPHY2_PHY_EVENT { > > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhyEvents at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhyEvents at runtime before using PhyEvent[]. > */ > -#ifndef MPI2_SASPHY2_PHY_EVENT_MAX > -#define MPI2_SASPHY2_PHY_EVENT_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER > @@ -3105,7 +3058,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 { > U16 > Reserved3; /*0x0E */ > MPI2_SASPHY2_PHY_EVENT > - PhyEvent[MPI2_SASPHY2_PHY_EVENT_MAX]; /*0x10 */ > + PhyEvent[]; /*0x10 */ > } MPI2_CONFIG_PAGE_SAS_PHY_2, > *PTR_MPI2_CONFIG_PAGE_SAS_PHY_2, > Mpi2SasPhyPage2_t, > @@ -3200,12 +3153,9 @@ typedef struct _MPI2_SASPHY3_PHY_EVENT_CONFIG { > #define MPI2_SASPHY3_TFLAGS_EVENT_NOTIFY (0x0001) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhyEvents at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhyEvents at runtime before using PhyEventConfig[]. > */ > -#ifndef MPI2_SASPHY3_PHY_EVENT_MAX > -#define MPI2_SASPHY3_PHY_EVENT_MAX (1) > -#endif > > typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER > @@ -3219,7 +3169,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 { > U16 > Reserved3; /*0x0E */ > MPI2_SASPHY3_PHY_EVENT_CONFIG > - PhyEventConfig[MPI2_SASPHY3_PHY_EVENT_MAX]; /*0x10 */ > + PhyEventConfig[]; /*0x10 */ > } MPI2_CONFIG_PAGE_SAS_PHY_3, > *PTR_MPI2_CONFIG_PAGE_SAS_PHY_3, > Mpi2SasPhyPage3_t, *pMpi2SasPhyPage3_t; > @@ -3358,12 +3308,9 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 { > /*Log Page 0 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumLogEntries at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumLogEntries at runtime before using LogEntry[]. > */ > -#ifndef MPI2_LOG_0_NUM_LOG_ENTRIES > -#define MPI2_LOG_0_NUM_LOG_ENTRIES (1) > -#endif > > #define MPI2_LOG_0_LOG_DATA_LENGTH (0x1C) > > @@ -3393,8 +3340,7 @@ typedef struct _MPI2_CONFIG_PAGE_LOG_0 { > U32 Reserved2; /*0x0C */ > U16 NumLogEntries;/*0x10 */ > U16 Reserved3; /*0x12 */ > - MPI2_LOG_0_ENTRY > - LogEntry[MPI2_LOG_0_NUM_LOG_ENTRIES]; /*0x14 */ > + MPI2_LOG_0_ENTRY LogEntry[]; /*0x14 */ > } MPI2_CONFIG_PAGE_LOG_0, *PTR_MPI2_CONFIG_PAGE_LOG_0, > Mpi2LogPage0_t, *pMpi2LogPage0_t; > > @@ -3408,12 +3354,9 @@ typedef struct _MPI2_CONFIG_PAGE_LOG_0 { > /*RAID Page 0 */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumElements at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumElements at runtime before using ConfigElement[]. > */ > -#ifndef MPI2_RAIDCONFIG0_MAX_ELEMENTS > -#define MPI2_RAIDCONFIG0_MAX_ELEMENTS (1) > -#endif > > typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT { > U16 ElementFlags; /*0x00 */ > @@ -3446,8 +3389,7 @@ typedef struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 { > U8 NumElements; /*0x2C */ > U8 Reserved2; /*0x2D */ > U16 Reserved3; /*0x2E */ > - MPI2_RAIDCONFIG0_CONFIG_ELEMENT > - ConfigElement[MPI2_RAIDCONFIG0_MAX_ELEMENTS]; /*0x30 */ > + MPI2_RAIDCONFIG0_CONFIG_ELEMENT ConfigElement[];/*0x30 */ > } MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, > *PTR_MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, > Mpi2RaidConfigurationPage0_t, > @@ -3687,12 +3629,9 @@ typedef struct _MPI26_PCIE_IO_UNIT0_PHY_DATA { > Mpi26PCIeIOUnit0PhyData_t, *pMpi26PCIeIOUnit0PhyData_t; > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumPhys at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumPhys at runtime before using PhyData[]. > */ > -#ifndef MPI26_PCIE_IOUNIT0_PHY_MAX > -#define MPI26_PCIE_IOUNIT0_PHY_MAX (1) > -#endif > > typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_0 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -3701,7 +3640,7 @@ typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_0 { > U8 InitStatus; /*0x0D */ > U16 Reserved3; /*0x0E */ > MPI26_PCIE_IO_UNIT0_PHY_DATA > - PhyData[MPI26_PCIE_IOUNIT0_PHY_MAX]; /*0x10 */ > + PhyData[]; /*0x10 */ > } MPI26_CONFIG_PAGE_PIOUNIT_0, > *PTR_MPI26_CONFIG_PAGE_PIOUNIT_0, > Mpi26PCIeIOUnitPage0_t, *pMpi26PCIeIOUnitPage0_t; > @@ -3993,12 +3932,9 @@ typedef struct _MPI26_PCIELINK2_LINK_EVENT { > > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumLinkEvents at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumLinkEvents at runtime before using LinkEvent[]. > */ > -#ifndef MPI26_PCIELINK2_LINK_EVENT_MAX > -#define MPI26_PCIELINK2_LINK_EVENT_MAX (1) > -#endif > > typedef struct _MPI26_CONFIG_PAGE_PCIELINK_2 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -4009,7 +3945,7 @@ typedef struct _MPI26_CONFIG_PAGE_PCIELINK_2 { > U8 Reserved3; /*0x0D */ > U16 Reserved4; /*0x0E */ > MPI26_PCIELINK2_LINK_EVENT > - LinkEvent[MPI26_PCIELINK2_LINK_EVENT_MAX]; /*0x10 */ > + LinkEvent[]; /*0x10 */ > } MPI26_CONFIG_PAGE_PCIELINK_2, *PTR_MPI26_CONFIG_PAGE_PCIELINK_2, > Mpi26PcieLinkPage2_t, *pMpi26PcieLinkPage2_t; > > @@ -4067,12 +4003,9 @@ typedef struct _MPI26_PCIELINK3_LINK_EVENT_CONFIG { > #define MPI26_PCIELINK3_TFLAGS_EVENT_NOTIFY (0x0001) > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check the value returned for NumLinkEvents at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check the value returned > + *for NumLinkEvents at runtime before using LinkEventConfig[]. > */ > -#ifndef MPI26_PCIELINK3_LINK_EVENT_MAX > -#define MPI26_PCIELINK3_LINK_EVENT_MAX (1) > -#endif > > typedef struct _MPI26_CONFIG_PAGE_PCIELINK_3 { > MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /*0x00 */ > @@ -4083,7 +4016,7 @@ typedef struct _MPI26_CONFIG_PAGE_PCIELINK_3 { > U8 Reserved3; /*0x0D */ > U16 Reserved4; /*0x0E */ > MPI26_PCIELINK3_LINK_EVENT_CONFIG > - LinkEventConfig[MPI26_PCIELINK3_LINK_EVENT_MAX]; /*0x10 */ > + LinkEventConfig[]; /*0x10 */ > } MPI26_CONFIG_PAGE_PCIELINK_3, *PTR_MPI26_CONFIG_PAGE_PCIELINK_3, > Mpi26PcieLinkPage3_t, *pMpi26PcieLinkPage3_t; > > diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_image.h b/drivers/scsi/mpt3sas/mpi/mpi2_image.h > index 33b9c3a6fd40..798ab6e33eb9 100644 > --- a/drivers/scsi/mpt3sas/mpi/mpi2_image.h > +++ b/drivers/scsi/mpt3sas/mpi/mpi2_image.h > @@ -295,20 +295,9 @@ typedef struct _MPI2_EXT_IMAGE_HEADER { > /*FLASH Layout Extended Image Data */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check RegionsPerLayout at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check NumberOfLayouts and > + *RegionsPerLayout at runtime before using Layout[] and Region[]. > */ > -#ifndef MPI2_FLASH_NUMBER_OF_REGIONS > -#define MPI2_FLASH_NUMBER_OF_REGIONS (1) > -#endif > - > -/* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check NumberOfLayouts at runtime. > - */ > -#ifndef MPI2_FLASH_NUMBER_OF_LAYOUTS > -#define MPI2_FLASH_NUMBER_OF_LAYOUTS (1) > -#endif > > typedef struct _MPI2_FLASH_REGION { > U8 RegionType; /*0x00 */ > @@ -325,7 +314,7 @@ typedef struct _MPI2_FLASH_LAYOUT { > U32 Reserved1; /*0x04 */ > U32 Reserved2; /*0x08 */ > U32 Reserved3; /*0x0C */ > - MPI2_FLASH_REGION Region[MPI2_FLASH_NUMBER_OF_REGIONS]; /*0x10 */ > + MPI2_FLASH_REGION Region[]; /*0x10 */ > } MPI2_FLASH_LAYOUT, *PTR_MPI2_FLASH_LAYOUT, > Mpi2FlashLayout_t, *pMpi2FlashLayout_t; > > @@ -339,7 +328,7 @@ typedef struct _MPI2_FLASH_LAYOUT_DATA { > U16 MinimumSectorAlignment; /*0x08 */ > U16 Reserved3; /*0x0A */ > U32 Reserved4; /*0x0C */ > - MPI2_FLASH_LAYOUT Layout[MPI2_FLASH_NUMBER_OF_LAYOUTS]; /*0x10 */ > + MPI2_FLASH_LAYOUT Layout[]; /*0x10 */ > } MPI2_FLASH_LAYOUT_DATA, *PTR_MPI2_FLASH_LAYOUT_DATA, > Mpi2FlashLayoutData_t, *pMpi2FlashLayoutData_t; > > @@ -373,12 +362,9 @@ typedef struct _MPI2_FLASH_LAYOUT_DATA { > /*Supported Devices Extended Image Data */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check NumberOfDevices at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check NumberOfDevices at > + *runtime before using SupportedDevice[]. > */ > -#ifndef MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES > -#define MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES (1) > -#endif > > typedef struct _MPI2_SUPPORTED_DEVICE { > U16 DeviceID; /*0x00 */ > @@ -399,7 +385,7 @@ typedef struct _MPI2_SUPPORTED_DEVICES_DATA { > U8 Reserved2; /*0x03 */ > U32 Reserved3; /*0x04 */ > MPI2_SUPPORTED_DEVICE > - SupportedDevice[MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES];/*0x08 */ > + SupportedDevice[]; /*0x08 */ > } MPI2_SUPPORTED_DEVICES_DATA, *PTR_MPI2_SUPPORTED_DEVICES_DATA, > Mpi2SupportedDevicesData_t, *pMpi2SupportedDevicesData_t; > > @@ -464,7 +450,7 @@ typedef struct _MPI25_ENCRYPTED_HASH_ENTRY { > U8 EncryptionAlgorithm; /*0x02 */ > U8 Reserved1; /*0x03 */ > U32 Reserved2; /*0x04 */ > - U32 EncryptedHash[1]; /*0x08 */ /* variable length */ > + U32 EncryptedHash[]; /*0x08 */ > } MPI25_ENCRYPTED_HASH_ENTRY, *PTR_MPI25_ENCRYPTED_HASH_ENTRY, > Mpi25EncryptedHashEntry_t, *pMpi25EncryptedHashEntry_t; > > @@ -508,7 +494,7 @@ typedef struct _MPI25_ENCRYPTED_HASH_DATA { > U8 NumHash; /*0x01 */ > U16 Reserved1; /*0x02 */ > U32 Reserved2; /*0x04 */ > - MPI25_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[1]; /*0x08 */ > + MPI25_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[]; /*0x08 */ > } MPI25_ENCRYPTED_HASH_DATA, *PTR_MPI25_ENCRYPTED_HASH_DATA, > Mpi25EncryptedHashData_t, *pMpi25EncryptedHashData_t; > > diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h > index 2c57115172cf..d92852591134 100644 > --- a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h > +++ b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h > @@ -808,12 +808,9 @@ typedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK { > /*Integrated RAID Configuration Change List Event data */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check NumElements at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check NumElements at > + *runtime before using ConfigElement[]. > */ > -#ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT > -#define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT (1) > -#endif > > typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT { > U16 ElementFlags; /*0x00 */ > @@ -848,7 +845,7 @@ typedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST { > U8 ConfigNum; /*0x03 */ > U32 Flags; /*0x04 */ > MPI2_EVENT_IR_CONFIG_ELEMENT > - ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT];/*0x08 */ > + ConfigElement[];/*0x08 */ > } MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, > *PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, > Mpi2EventDataIrConfigChangeList_t, > @@ -969,12 +966,9 @@ typedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW { > /*SAS Topology Change List Event data */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check NumEntries at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check NumEntries at > + *runtime before using PHY[]. > */ > -#ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT > -#define MPI2_EVENT_SAS_TOPO_PHY_COUNT (1) > -#endif > > typedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY { > U16 AttachedDevHandle; /*0x00 */ > @@ -994,7 +988,7 @@ typedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST { > U8 ExpStatus; /*0x0A */ > U8 PhysicalPort; /*0x0B */ > MPI2_EVENT_SAS_TOPO_PHY_ENTRY > - PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /*0x0C */ > + PHY[]; /*0x0C */ > } MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, > *PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, > Mpi2EventDataSasTopologyChangeList_t, > @@ -1229,12 +1223,9 @@ typedef struct _MPI26_EVENT_DATA_PCIE_ENUMERATION { > /*PCIe Topology Change List Event data (MPI v2.6 and later) */ > > /* > - *Host code (drivers, BIOS, utilities, etc.) should leave this define set to > - *one and check NumEntries at runtime. > + *Host code (drivers, BIOS, utilities, etc.) should check NumEntries at > + *runtime before using PortEntry[]. > */ > -#ifndef MPI26_EVENT_PCIE_TOPO_PORT_COUNT > -#define MPI26_EVENT_PCIE_TOPO_PORT_COUNT (1) > -#endif > > typedef struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY { > U16 AttachedDevHandle; /*0x00 */ > @@ -1286,7 +1277,7 @@ typedef struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST { > U8 SwitchStatus; /*0x0A */ > U8 PhysicalPort; /*0x0B */ > MPI26_EVENT_PCIE_TOPO_PORT_ENTRY > - PortEntry[MPI26_EVENT_PCIE_TOPO_PORT_COUNT]; /*0x0C */ > + PortEntry[]; /*0x0C */ > } MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, > *PTR_MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, > Mpi26EventDataPCIeTopologyChangeList_t, > -- > 2.39.2 > -- Kees Cook