Re: [PATCH 1/2][next] scsi: hptiop: Replace one-element array with flexible-array member

From: Kees Cook
Date: Sat Sep 24 2022 - 02:01:57 EST


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