]> git.baikalelectronics.ru Git - kernel.git/commit
scsi: libsas: Introduce struct smp_rg_resp
authorDamien Le Moal <damien.lemoal@opensource.wdc.com>
Thu, 9 Jun 2022 02:24:55 +0000 (11:24 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 10 Jun 2022 17:08:06 +0000 (13:08 -0400)
commita49a2dabdc621d68d0a3d8a9fc0e74c4abf55edd
treeb264450c2813278fddde3d086f0a689d865001df
parente4c76ddeeee4f1194220d9abdf4ed34c0bc84cb3
scsi: libsas: Introduce struct smp_rg_resp

When compiling with gcc 12, several warnings are thrown by gcc when
compiling drivers/scsi/libsas/sas_expander.c, e.g.:

In function ‘sas_get_ex_change_count’,
    inlined from ‘sas_find_bcast_dev’ at
    drivers/scsi/libsas/sas_expander.c:1816:8:
drivers/scsi/libsas/sas_expander.c:1781:20: warning: array subscript
‘struct smp_resp[0]’ is partly outside array bounds of ‘unsigned
char[32]’ [-Warray-bounds]
 1781 |         if (rg_resp->result != SMP_RESP_FUNC_ACC) {
      |             ~~~~~~~^~~~~~~~

This is due to the use of the struct smp_resp to aggregate all possible
response types using a union but allocating a response buffer with a size
exactly equal to the size of the response type needed. This leads to access
to fields of struct smp_resp from an allocated memory area that is smaller
than the size of struct smp_resp.

Fix this by defining struct smp_rg_resp for sas report general responses.

Link: https://lore.kernel.org/r/20220609022456.409087-3-damien.lemoal@opensource.wdc.com
Reviewed-by: John Garry <john.garry@huawei.com>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libsas/sas_expander.c
include/scsi/sas.h