]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
scsi: megaraid: Avoid mismatched storage type sizes
authorKees Cook <keescook@chromium.org>
Wed, 5 Jan 2022 17:36:33 +0000 (09:36 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 7 Jan 2022 14:19:51 +0000 (09:19 -0500)
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>
drivers/scsi/megaraid.c

index 0d31d7a5e3352fc8e0135cc097dab7a910bfb1ed..bf987f3a7f3f2c71c3315531e22ca93f77afc63b 100644 (file)
@@ -192,23 +192,21 @@ mega_query_adapter(adapter_t *adapter)
 {
        dma_addr_t      prod_info_dma_handle;
        mega_inquiry3   *inquiry3;
-       u8      raw_mbox[sizeof(struct mbox_out)];
-       mbox_t  *mbox;
+       struct mbox_out mbox;
+       u8      *raw_mbox = (u8 *)&mbox;
        int     retval;
 
        /* Initialize adapter inquiry mailbox */
 
-       mbox = (mbox_t *)raw_mbox;
-
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        /*
         * Try to issue Inquiry3 command
         * if not succeeded, then issue MEGA_MBOXCMD_ADAPTERINQ command and
         * update enquiry3 structure
         */
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        inquiry3 = (mega_inquiry3 *)adapter->mega_buffer;
 
@@ -232,10 +230,10 @@ mega_query_adapter(adapter_t *adapter)
 
                inq = &ext_inq->raid_inq;
 
-               mbox->m_out.xferaddr = (u32)dma_handle;
+               mbox.xferaddr = (u32)dma_handle;
 
                /*issue old 0x04 command to adapter */
-               mbox->m_out.cmd = MEGA_MBOXCMD_ADPEXTINQ;
+               mbox.cmd = MEGA_MBOXCMD_ADPEXTINQ;
 
                issue_scb_block(adapter, raw_mbox);
 
@@ -262,7 +260,7 @@ mega_query_adapter(adapter_t *adapter)
                                                      sizeof(mega_product_info),
                                                      DMA_FROM_DEVICE);
 
-               mbox->m_out.xferaddr = prod_info_dma_handle;
+               mbox.xferaddr = prod_info_dma_handle;
 
                raw_mbox[0] = FC_NEW_CONFIG;    /* i.e. mbox->cmd=0xA1 */
                raw_mbox[2] = NC_SUBOP_PRODUCT_INFO;    /* i.e. 0x0E */
@@ -3569,16 +3567,14 @@ mega_n_to_m(void __user *arg, megacmd_t *mc)
 static int
 mega_is_bios_enabled(adapter_t *adapter)
 {
-       unsigned char   raw_mbox[sizeof(struct mbox_out)];
-       mbox_t  *mbox;
-
-       mbox = (mbox_t *)raw_mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
 
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        raw_mbox[0] = IS_BIOS_ENABLED;
        raw_mbox[2] = GET_BIOS;
@@ -3600,13 +3596,11 @@ mega_is_bios_enabled(adapter_t *adapter)
 static void
 mega_enum_raid_scsi(adapter_t *adapter)
 {
-       unsigned char raw_mbox[sizeof(struct mbox_out)];
-       mbox_t *mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
        int i;
 
-       mbox = (mbox_t *)raw_mbox;
-
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        /*
         * issue command to find out what channels are raid/scsi
@@ -3616,7 +3610,7 @@ mega_enum_raid_scsi(adapter_t *adapter)
 
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        /*
         * Non-ROMB firmware fail this command, so all channels
@@ -3655,23 +3649,21 @@ static void
 mega_get_boot_drv(adapter_t *adapter)
 {
        struct private_bios_data        *prv_bios_data;
-       unsigned char   raw_mbox[sizeof(struct mbox_out)];
-       mbox_t  *mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
        u16     cksum = 0;
        u8      *cksum_p;
        u8      boot_pdrv;
        int     i;
 
-       mbox = (mbox_t *)raw_mbox;
-
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        raw_mbox[0] = BIOS_PVT_DATA;
        raw_mbox[2] = GET_BIOS_PVT_DATA;
 
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        adapter->boot_ldrv_enabled = 0;
        adapter->boot_ldrv = 0;
@@ -3721,13 +3713,11 @@ mega_get_boot_drv(adapter_t *adapter)
 static int
 mega_support_random_del(adapter_t *adapter)
 {
-       unsigned char raw_mbox[sizeof(struct mbox_out)];
-       mbox_t *mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
        int rval;
 
-       mbox = (mbox_t *)raw_mbox;
-
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        /*
         * issue command
@@ -3750,13 +3740,11 @@ mega_support_random_del(adapter_t *adapter)
 static int
 mega_support_ext_cdb(adapter_t *adapter)
 {
-       unsigned char raw_mbox[sizeof(struct mbox_out)];
-       mbox_t *mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
        int rval;
 
-       mbox = (mbox_t *)raw_mbox;
-
-       memset(&mbox->m_out, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
        /*
         * issue command to find out if controller supports extended CDBs.
         */
@@ -3865,16 +3853,14 @@ mega_do_del_logdrv(adapter_t *adapter, int logdrv)
 static void
 mega_get_max_sgl(adapter_t *adapter)
 {
-       unsigned char   raw_mbox[sizeof(struct mbox_out)];
-       mbox_t  *mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
 
-       mbox = (mbox_t *)raw_mbox;
-
-       memset(mbox, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        raw_mbox[0] = MAIN_MISC_OPCODE;
        raw_mbox[2] = GET_MAX_SG_SUPPORT;
@@ -3888,7 +3874,7 @@ mega_get_max_sgl(adapter_t *adapter)
        }
        else {
                adapter->sglen = *((char *)adapter->mega_buffer);
-               
+
                /*
                 * Make sure this is not more than the resources we are
                 * planning to allocate
@@ -3910,16 +3896,14 @@ mega_get_max_sgl(adapter_t *adapter)
 static int
 mega_support_cluster(adapter_t *adapter)
 {
-       unsigned char   raw_mbox[sizeof(struct mbox_out)];
-       mbox_t  *mbox;
-
-       mbox = (mbox_t *)raw_mbox;
+       struct mbox_out mbox;
+       unsigned char   *raw_mbox = (u8 *)&mbox;
 
-       memset(mbox, 0, sizeof(raw_mbox));
+       memset(&mbox, 0, sizeof(mbox));
 
        memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
-       mbox->m_out.xferaddr = (u32)adapter->buf_dma_handle;
+       mbox.xferaddr = (u32)adapter->buf_dma_handle;
 
        /*
         * Try to get the initiator id. This command will succeed iff the