scsi: megaraid_sas: Use struct_size() in code related to struct MR_FW_RAID_MAP
authorGustavo A. R. Silva <gustavoars@kernel.org>
Mon, 15 Aug 2022 21:51:36 +0000 (16:51 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 1 Sep 2022 03:39:59 +0000 (23:39 -0400)
Prefer struct_size() over open-coded versions of idiom:

sizeof(struct-with-flex-array) + sizeof(type-of-flex-array) * count

where count is the max number of items the flexible array is supposed to
have.

Link: https://github.com/KSPP/linux/issues/160
Link: https://lore.kernel.org/r/1211398fb8f7ab332a93f4f8f1a63e8168dbd002.1660592640.git.gustavoars@kernel.org
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fp.c

index 59703ef8b1adea0c0c7d9545ee40c689f5d6c0a0..656b7a7c04d769716b33de4c2796c67b9c3ce645 100644 (file)
@@ -5155,9 +5155,9 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance)
                fusion->current_map_sz = ventura_map_sz;
                fusion->max_map_sz = ventura_map_sz;
        } else {
-               fusion->old_map_sz =  sizeof(struct MR_FW_RAID_MAP) +
-                                       (sizeof(struct MR_LD_SPAN_MAP) *
-                                       instance->fw_supported_vd_count);
+               fusion->old_map_sz =
+                       struct_size((struct MR_FW_RAID_MAP *)0, ldSpanMap,
+                                   instance->fw_supported_vd_count);
                fusion->new_map_sz =  sizeof(struct MR_FW_RAID_MAP_EXT);
 
                fusion->max_map_sz =
index b2ec7a3f7650d77de7f8a7229951c8ea6fef3f7b..da1cad1ee12389053fec297e2f9da723d2145fb6 100644 (file)
@@ -326,9 +326,9 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id)
        else if (instance->supportmax256vd)
                expected_size = sizeof(struct MR_FW_RAID_MAP_EXT);
        else
-               expected_size =
-                       (sizeof(struct MR_FW_RAID_MAP) +
-                       (sizeof(struct MR_LD_SPAN_MAP) * le16_to_cpu(pDrvRaidMap->ldCount)));
+               expected_size = struct_size((struct MR_FW_RAID_MAP *)0,
+                                           ldSpanMap,
+                                           le16_to_cpu(pDrvRaidMap->ldCount));
 
        if (le32_to_cpu(pDrvRaidMap->totalSize) != expected_size) {
                dev_dbg(&instance->pdev->dev, "megasas: map info structure size 0x%x",