scsi: megaraid_sas: Use struct_size() helper
Subsystems (2)
PATCH 1/1 scsi: megaraid_sas: Use struct_size() helper
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct MR_PD_CFG_SEQ_NUM_SYNC {
...
struct MR_PD_CFG_SEQ seq[1];
} __packed;Make use of the struct_size() helper instead of an open-coded version in order to avoid any potential type mistakes.
So, replace the following form:
sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) + (sizeof(struct MR_PD_CFG_SEQ) * (MAX_PHYSICAL_DEVICES - 1))
with:
struct_size(pd_sync, seq, MAX_PHYSICAL_DEVICES - 1)
This code was detected with the help of Coccinelle.
--- drivers/scsi/megaraid/megaraid_sas_fusion.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/scsi/megaraid/megaraid_sas_fusion.c +2 -4
@@ -1191,7 +1191,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance)int megasas_sync_pd_seq_num (struct megasas_instance *instance,bool pend) {int ret =0 ; -u32 pd_seq_map_sz; +size_t pd_seq_map_sz;struct megasas_cmd *cmd;struct megasas_dcmd_frame *dcmd;struct fusion_context *fusion = instance->ctrl_context;
@@ -1200,9 +1200,7 @@ megasas_sync_pd_seq_num(struct megasas_instance *instance, bool pend) { pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id &1 )]; pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id &1 )]; - pd_seq_map_sz =sizeof (struct MR_PD_CFG_SEQ_NUM_SYNC ) + - (sizeof (struct MR_PD_CFG_SEQ ) * - (MAX_PHYSICAL_DEVICES -1 )); + pd_seq_map_sz =struct_size (pd_sync, seq,MAX_PHYSICAL_DEVICES -1 ); cmd =megasas_get_cmd (instance);if (!cmd) {
Signature · 1 line
2.21.0
Quoted 17 lines · Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct MR_PD_CFG_SEQ_NUM_SYNC { ... struct MR_PD_CFG_SEQ seq[1]; } __packed;Make use of the
struct_size()helper instead of an open-coded version in order to avoid any potential type mistakes.So, replace the following form:
sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC)+ (sizeof(struct MR_PD_CFG_SEQ)* (MAX_PHYSICAL_DEVICES- 1))
Quoted 7 lines
with:
struct_size(pd_sync, seq, MAX_PHYSICAL_DEVICES - 1)This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>
Quoted 31 lines
--- drivers/scsi/megaraid/megaraid_sas_fusion.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)drivers/scsi/megaraid/megaraid_sas_fusion.c +2
-5@@ -1191,7 +1191,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance)int megasas_sync_pd_seq_num (struct megasas_instance *instance,bool pend) {int ret =0 ; -u32 pd_seq_map_sz; +size_t pd_seq_map_sz;struct megasas_cmd *cmd;struct megasas_dcmd_frame *dcmd;struct fusion_context *fusion = instance->ctrl_context;@@ -1200,9 +1200,7 @@ megasas_sync_pd_seq_num(struct megasas_instance *instance, bool pend) { pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id &1 )]; pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id &1 )]; - pd_seq_map_sz =sizeof (struct MR_PD_CFG_SEQ_NUM_SYNC ) + - (sizeof (struct MR_PD_CFG_SEQ ) * - (MAX_PHYSICAL_DEVICES -1 )); + pd_seq_map_sz =struct_size (pd_sync, seq,MAX_PHYSICAL_DEVICES -1 ); cmd =megasas_get_cmd (instance);if (!cmd) { --2.21.0
Martin K. Petersen
AppliedGustavo,
Quoted 11 lines
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct MR_PD_CFG_SEQ_NUM_SYNC { ... struct MR_PD_CFG_SEQ seq[1]; } __packed;Make use of the
struct_size()helper instead of an open-coded version in order to avoid any potential type mistakes.
Applied to 5.3/scsi-queue, thanks!
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering