scsi: mpt3sas: Use struct_size() for struct size calculations
authorJames Seo <james@equiv.tech>
Sun, 6 Aug 2023 17:05:59 +0000 (10:05 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 15 Nov 2023 13:52:02 +0000 (08:52 -0500)
After converting terminal variable arrays into flexible array members, use
the bounds-checking struct_size() helper when possible to avoid open-coded
arithmetic struct size calculations.

Signed-off-by: James Seo <james@equiv.tech>
Link: https://lore.kernel.org/r/20230806170604.16143-8-james@equiv.tech
Tested-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_base.c
drivers/scsi/mpt3sas/mpt3sas_scsih.c
drivers/scsi/mpt3sas/mpt3sas_transport.c
drivers/scsi/mpt3sas/mpt3sas_warpdrive.c

index a75f670..bee1e27 100644 (file)
@@ -4893,8 +4893,7 @@ mpt3sas_base_update_missing_delay(struct MPT3SAS_ADAPTER *ioc,
        if (!num_phys)
                return;
 
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
index 605013d..0a720ce 100644 (file)
@@ -2431,8 +2431,7 @@ _scsih_get_volume_capabilities(struct MPT3SAS_ADAPTER *ioc,
        }
 
        raid_device->num_pds = num_pds;
-       sz = offsetof(Mpi2RaidVolPage0_t, PhysDisk) + (num_pds *
-           sizeof(Mpi2RaidVol0PhysDisk_t));
+       sz = struct_size(vol_pg0, PhysDisk, num_pds);
        vol_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!vol_pg0) {
                dfailprintk(ioc,
@@ -5966,8 +5965,7 @@ _scsih_update_vphys_after_reset(struct MPT3SAS_ADAPTER *ioc)
        /*
         * Read SASIOUnitPage0 to get each HBA Phy's data.
         */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) +
-           (ioc->sas_hba.num_phys * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -6145,8 +6143,7 @@ _scsih_get_port_table_after_reset(struct MPT3SAS_ADAPTER *ioc,
        u64 attached_sas_addr;
        u8 found = 0, port_count = 0, port_id;
 
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys
-           * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -6579,8 +6576,7 @@ _scsih_sas_host_refresh(struct MPT3SAS_ADAPTER *ioc)
                  ioc_info(ioc, "updating handles for sas_host(0x%016llx)\n",
                           (u64)ioc->sas_hba.sas_address));
 
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys
-           * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -6731,8 +6727,7 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc)
        ioc->sas_hba.num_phys = num_phys;
 
        /* sas_iounit page 0 */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -6754,8 +6749,7 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc)
        }
 
        /* sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
index e8a4750..421ea51 100644 (file)
@@ -1792,8 +1792,7 @@ _transport_phy_enable(struct sas_phy *phy, int enable)
        /* handle hba phys */
 
        /* read sas_iounit page 0 */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -1833,8 +1832,7 @@ _transport_phy_enable(struct sas_phy *phy, int enable)
        }
 
        /* read sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
@@ -1944,8 +1942,7 @@ _transport_phy_speed(struct sas_phy *phy, struct sas_phy_linkrates *rates)
        /* handle hba phys */
 
        /* sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
index cc07ba4..1d64e50 100644 (file)
@@ -141,8 +141,7 @@ mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
                return;
        }
 
-       sz = offsetof(Mpi2RaidVolPage0_t, PhysDisk) + (num_pds *
-           sizeof(Mpi2RaidVol0PhysDisk_t));
+       sz = struct_size(vol_pg0, PhysDisk, num_pds);
        vol_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!vol_pg0) {
                ioc_info(ioc, "WarpDrive : Direct IO is disabled Memory allocation failure for RVPG0\n");