Skip to content

Commit 315d049

Browse files
keesmartinkpetersen
authored andcommitted
scsi: megaraid: Avoid mismatched storage type sizes
Remove needless use of mbox_t, replacing with just struct mbox_out. Silences compiler warnings under a -Warray-bounds build: drivers/scsi/megaraid.c: In function 'megaraid_probe_one': drivers/scsi/megaraid.c:3615:30: error: array subscript 'mbox_t[0]' is partly outside array bounds of 'unsigned char[15]' [-Werror=array-bounds] 3615 | mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle; | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/megaraid.c:3599:23: note: while referencing 'raw_mbox' 3599 | unsigned char raw_mbox[sizeof(struct mbox_out)]; | ^~~~~~~~ Link: https://lore.kernel.org/r/20220105173633.2421129-1-keescook@chromium.org Cc: Kashyap Desai <kashyap.desai@broadcom.com> Cc: Sumit Saxena <sumit.saxena@broadcom.com> Cc: Shivasharan S <shivasharan.srikanteshwara@broadcom.com> Cc: "James E.J. Bottomley" <jejb@linux.ibm.com> Cc: "Martin K. Petersen" <martin.petersen@oracle.com> Cc: megaraidlinux.pdl@broadcom.com Cc: linux-scsi@vger.kernel.org Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 5d9224f commit 315d049

File tree

1 file changed

+34
-50
lines changed

1 file changed

+34
-50
lines changed

drivers/scsi/megaraid.c

Lines changed: 34 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -192,23 +192,21 @@ mega_query_adapter(adapter_t *adapter)
192192
{
193193
dma_addr_t prod_info_dma_handle;
194194
mega_inquiry3 *inquiry3;
195-
u8 raw_mbox[sizeof(struct mbox_out)];
196-
mbox_t *mbox;
195+
struct mbox_out mbox;
196+
u8 *raw_mbox = (u8 *)&mbox;
197197
int retval;
198198

199199
/* Initialize adapter inquiry mailbox */
200200

201-
mbox = (mbox_t *)raw_mbox;
202-
203201
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
204-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
202+
memset(&mbox, 0, sizeof(mbox));
205203

206204
/*
207205
* Try to issue Inquiry3 command
208206
* if not succeeded, then issue MEGA_MBOXCMD_ADAPTERINQ command and
209207
* update enquiry3 structure
210208
*/
211-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
209+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
212210

213211
inquiry3 = (mega_inquiry3 *)adapter->mega_buffer;
214212

@@ -232,10 +230,10 @@ mega_query_adapter(adapter_t *adapter)
232230

233231
inq = &ext_inq->raid_inq;
234232

235-
mbox->m_out.xferaddr = (u32)dma_handle;
233+
mbox.xferaddr = (u32)dma_handle;
236234

237235
/*issue old 0x04 command to adapter */
238-
mbox->m_out.cmd = MEGA_MBOXCMD_ADPEXTINQ;
236+
mbox.cmd = MEGA_MBOXCMD_ADPEXTINQ;
239237

240238
issue_scb_block(adapter, raw_mbox);
241239

@@ -262,7 +260,7 @@ mega_query_adapter(adapter_t *adapter)
262260
sizeof(mega_product_info),
263261
DMA_FROM_DEVICE);
264262

265-
mbox->m_out.xferaddr = prod_info_dma_handle;
263+
mbox.xferaddr = prod_info_dma_handle;
266264

267265
raw_mbox[0] = FC_NEW_CONFIG; /* i.e. mbox->cmd=0xA1 */
268266
raw_mbox[2] = NC_SUBOP_PRODUCT_INFO; /* i.e. 0x0E */
@@ -3569,16 +3567,14 @@ mega_n_to_m(void __user *arg, megacmd_t *mc)
35693567
static int
35703568
mega_is_bios_enabled(adapter_t *adapter)
35713569
{
3572-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3573-
mbox_t *mbox;
3574-
3575-
mbox = (mbox_t *)raw_mbox;
3570+
struct mbox_out mbox;
3571+
unsigned char *raw_mbox = (u8 *)&mbox;
35763572

3577-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
3573+
memset(&mbox, 0, sizeof(mbox));
35783574

35793575
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
35803576

3581-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
3577+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
35823578

35833579
raw_mbox[0] = IS_BIOS_ENABLED;
35843580
raw_mbox[2] = GET_BIOS;
@@ -3600,13 +3596,11 @@ mega_is_bios_enabled(adapter_t *adapter)
36003596
static void
36013597
mega_enum_raid_scsi(adapter_t *adapter)
36023598
{
3603-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3604-
mbox_t *mbox;
3599+
struct mbox_out mbox;
3600+
unsigned char *raw_mbox = (u8 *)&mbox;
36053601
int i;
36063602

3607-
mbox = (mbox_t *)raw_mbox;
3608-
3609-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
3603+
memset(&mbox, 0, sizeof(mbox));
36103604

36113605
/*
36123606
* issue command to find out what channels are raid/scsi
@@ -3616,7 +3610,7 @@ mega_enum_raid_scsi(adapter_t *adapter)
36163610

36173611
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
36183612

3619-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
3613+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
36203614

36213615
/*
36223616
* Non-ROMB firmware fail this command, so all channels
@@ -3655,23 +3649,21 @@ static void
36553649
mega_get_boot_drv(adapter_t *adapter)
36563650
{
36573651
struct private_bios_data *prv_bios_data;
3658-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3659-
mbox_t *mbox;
3652+
struct mbox_out mbox;
3653+
unsigned char *raw_mbox = (u8 *)&mbox;
36603654
u16 cksum = 0;
36613655
u8 *cksum_p;
36623656
u8 boot_pdrv;
36633657
int i;
36643658

3665-
mbox = (mbox_t *)raw_mbox;
3666-
3667-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
3659+
memset(&mbox, 0, sizeof(mbox));
36683660

36693661
raw_mbox[0] = BIOS_PVT_DATA;
36703662
raw_mbox[2] = GET_BIOS_PVT_DATA;
36713663

36723664
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
36733665

3674-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
3666+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
36753667

36763668
adapter->boot_ldrv_enabled = 0;
36773669
adapter->boot_ldrv = 0;
@@ -3721,13 +3713,11 @@ mega_get_boot_drv(adapter_t *adapter)
37213713
static int
37223714
mega_support_random_del(adapter_t *adapter)
37233715
{
3724-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3725-
mbox_t *mbox;
3716+
struct mbox_out mbox;
3717+
unsigned char *raw_mbox = (u8 *)&mbox;
37263718
int rval;
37273719

3728-
mbox = (mbox_t *)raw_mbox;
3729-
3730-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
3720+
memset(&mbox, 0, sizeof(mbox));
37313721

37323722
/*
37333723
* issue command
@@ -3750,13 +3740,11 @@ mega_support_random_del(adapter_t *adapter)
37503740
static int
37513741
mega_support_ext_cdb(adapter_t *adapter)
37523742
{
3753-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3754-
mbox_t *mbox;
3743+
struct mbox_out mbox;
3744+
unsigned char *raw_mbox = (u8 *)&mbox;
37553745
int rval;
37563746

3757-
mbox = (mbox_t *)raw_mbox;
3758-
3759-
memset(&mbox->m_out, 0, sizeof(raw_mbox));
3747+
memset(&mbox, 0, sizeof(mbox));
37603748
/*
37613749
* issue command to find out if controller supports extended CDBs.
37623750
*/
@@ -3865,16 +3853,14 @@ mega_do_del_logdrv(adapter_t *adapter, int logdrv)
38653853
static void
38663854
mega_get_max_sgl(adapter_t *adapter)
38673855
{
3868-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3869-
mbox_t *mbox;
3856+
struct mbox_out mbox;
3857+
unsigned char *raw_mbox = (u8 *)&mbox;
38703858

3871-
mbox = (mbox_t *)raw_mbox;
3872-
3873-
memset(mbox, 0, sizeof(raw_mbox));
3859+
memset(&mbox, 0, sizeof(mbox));
38743860

38753861
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
38763862

3877-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
3863+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
38783864

38793865
raw_mbox[0] = MAIN_MISC_OPCODE;
38803866
raw_mbox[2] = GET_MAX_SG_SUPPORT;
@@ -3888,7 +3874,7 @@ mega_get_max_sgl(adapter_t *adapter)
38883874
}
38893875
else {
38903876
adapter->sglen = *((char *)adapter->mega_buffer);
3891-
3877+
38923878
/*
38933879
* Make sure this is not more than the resources we are
38943880
* planning to allocate
@@ -3910,16 +3896,14 @@ mega_get_max_sgl(adapter_t *adapter)
39103896
static int
39113897
mega_support_cluster(adapter_t *adapter)
39123898
{
3913-
unsigned char raw_mbox[sizeof(struct mbox_out)];
3914-
mbox_t *mbox;
3915-
3916-
mbox = (mbox_t *)raw_mbox;
3899+
struct mbox_out mbox;
3900+
unsigned char *raw_mbox = (u8 *)&mbox;
39173901

3918-
memset(mbox, 0, sizeof(raw_mbox));
3902+
memset(&mbox, 0, sizeof(mbox));
39193903

39203904
memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
39213905

3922-
mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
3906+
mbox.xferaddr = (u32)adapter->buf_dma_handle;
39233907

39243908
/*
39253909
* Try to get the initiator id. This command will succeed iff the

0 commit comments

Comments
 (0)