On Thu, Sep 22, 2022 at 11:53:23AM -0500, Gustavo A. R. Silva wrote: > One-element arrays are deprecated, and we are replacing them with flexible > array members instead. So, replace one-element array with flexible-array > member in struct hpt_iop_request_scsi_command and refactor the rest of the > code, accordingly. > > The following pieces of code suggest that the one element of array sg_list > in struct hpt_iop_request_scsi_command is not taken into account when > calculating the total size for both struct hpt_iop_request_scsi_command > and the maximum number of elements sg_list will contain: > > 1047 req->header.size = cpu_to_le32( > 1048 sizeof(struct hpt_iop_request_scsi_command) > 1049 - sizeof(struct hpt_iopsg) > 1050 + sg_count * sizeof(struct hpt_iopsg)); > > 1400 req_size = sizeof(struct hpt_iop_request_scsi_command) 1401 + sizeof(struct hpt_iopsg) * (hba->max_sg_descriptors - 1); Accidentally merge line above ("1401" should start a new line). > So it's safe to replace the one-element array with a flexible-array > member and update the code above, accordingly: now we don't need to > subtract sizeof(struct hpt_iopsg) from sizeof(struct hpt_iop_request_scsi_command) > because this is implicitly done by the flex-array transformation. The only binary output change I see is from the line numbers changing from the patch, as the argument to __might_sleep() is adjusted: ... │ call d1 <hptiop_reset+0x74> │ R_X86_64_PLT32 __x86_indirect_thunk_rax-0x4 │ - mov $0x434,%esi │ + mov $0x433,%esi │ mov $0x0,%rdi │ R_X86_64_32S .rodata.str1.1 │ call e2 <hptiop_reset+0x85> │ R_X86_64_PLT32 __might_sleep-0x4 ... So this looks good! Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -- Kees Cook