scsi: megaraid_sas: Add flexible array member for SGLs
Subsystems (2)
PATCH 1/1 scsi: megaraid_sas: Add flexible array member for SGLs
struct MPI2_RAID_SCSI_IO_REQUEST ends with a single SGL, but expects to copy multiple. Add a flexible array member so the compiler can reason about the size of the memcpy(). This will avoid the run-time false positive warning:
memcpy: detected field-spanning write (size 128) of single field "&r1_cmd->io_request->SGL" at drivers/scsi/megaraid/megaraid_sas_fusion.c:3326 (size 16)
This change results in no binary output differences.
---
Holger, are you able to test this change? I expect it should do the trick, but I don't have the hardware.
--- drivers/scsi/megaraid/megaraid_sas_fusion.c | 2 +- drivers/scsi/megaraid/megaraid_sas_fusion.h | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-)
drivers/scsi/megaraid/megaraid_sas_fusion.c +1 -1
@@ -3323,7 +3323,7 @@ static void megasas_prepare_secondRaid1_IO(struct megasas_instance *instance,/* copy the io request frame as well as 8 SGEs data for r1 command*/ memcpy (r1_cmd->io_request, cmd->io_request, (sizeof (struct MPI2_RAID_SCSI_IO_REQUEST ))); -memcpy (&r1_cmd->io_request->SGL, &cmd->io_request->SGL, +memcpy (r1_cmd->io_request->SGLs, cmd->io_request->SGLs, (fusion->max_sge_in_main_msg *sizeof (union MPI2_SGE_IO_UNION )));/*sense buffer is different for r1 command*/ r1_cmd->io_request->SenseBufferLowAddress =
drivers/scsi/megaraid/megaraid_sas_fusion.h +4 -1
@@ -526,7 +526,10 @@ struct MPI2_RAID_SCSI_IO_REQUEST {__le32 Control;/* 0x3C */ union MPI2_SCSI_IO_CDB_UNION CDB ;/* 0x40 */ union RAID_CONTEXT_UNION RaidContext;/* 0x60 */ -union MPI2_SGE_IO_UNION SGL ;/* 0x80 */ +union { +union MPI2_SGE_IO_UNION SGL;/* 0x80 */ + DECLARE_FLEX_ARRAY(union MPI2_SGE_IO_UNION, SGLs); + }; };/*
Signature · 1 line
2.34.1
Quoted 19 lines · Kees Cook
struct
MPI2_RAID_SCSI_IO_REQUESTends with a single SGL, but expects to copy multiple. Add a flexible array member so the compiler can reason about the size of thememcpy(). This will avoid the run-time false positive warning:memcpy: detected field-spanning write (size 128) of single field "
&r1_cmd->io_request->SGL" atdrivers/scsi/megaraid/megaraid_sas_fusion.c:3326(size 16)This change results in no binary output differences.
Reported-by Holger Kiehl <[email protected]>Cc Kashyap Desai <[email protected]>Cc Sumit Saxena <[email protected]>Cc Shivasharan S <[email protected]>Cc "James E.J. Bottomley" <[email protected]>Cc "Martin K. Petersen" <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 4 lines
---
Holger, are you able to test this change? I expect it should do the trick, but I don't have the hardware.
Yes, that does work. I no longer see 'memcpy: detected field-spanning write (size 128)'. Tested this on 6.1.4-rc1. Did not see any other regression.
Regards,
Holger
Martin K. Petersen
AppliedKees,
Quoted 4 lines
struct
MPI2_RAID_SCSI_IO_REQUESTends with a single SGL, but expects to copy multiple. Add a flexible array member so the compiler can reason about the size of thememcpy(). This will avoid the run-time false positive warning:
Applied to 6.3/scsi-staging, thanks!
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering
Martin K. Petersen
AppliedQuoted 8 lines · Kees Cook
struct
MPI2_RAID_SCSI_IO_REQUESTends with a single SGL, but expects to copy multiple. Add a flexible array member so the compiler can reason about the size of thememcpy(). This will avoid the run-time false positive warning:memcpy: detected field-spanning write (size 128) of single field "
&r1_cmd->io_request->SGL" atdrivers/scsi/megaraid/megaraid_sas_fusion.c:3326(size 16)[...]
Applied to 6.3/scsi-queue, thanks!
[1/1] scsi: megaraid_sas: Add flexible array member for SGLs
https://git.kernel.org/mkp/scsi/c/a9a3629592ab
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering