From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-by2nam03on0132.outbound.protection.outlook.com ([104.47.42.132]:24496 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1032516AbeCAPhr (ORCPT ); Thu, 1 Mar 2018 10:37:47 -0500 From: Sasha Levin To: "stable@vger.kernel.org" , "stable-commits@vger.kernel.org" CC: Arnd Bergmann , "Martin K . Petersen" , Sasha Levin Subject: [added to the 4.1 stable tree] scsi: advansys: fix uninitialized data access Date: Thu, 1 Mar 2018 15:27:10 +0000 Message-ID: <20180301152116.1486-437-alexander.levin@microsoft.com> References: <20180301152116.1486-1-alexander.levin@microsoft.com> In-Reply-To: <20180301152116.1486-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Arnd Bergmann This patch has been added to the 4.1 stable tree. If you have any objections, please let us know. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D [ Upstream commit 44a5b977128c0ffff0654392b40f4c2ce72a619b ] gcc-7.0.1 now warns about a previously unnoticed access of uninitialized struct members: drivers/scsi/advansys.c: In function 'AscMsgOutSDTR': drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be use= d uninitialized in this function [-Werror=3Dmaybe-uninitialized] ((ushort)s_buffer[i + 1] << 8) | s_buffer[i]); ^ drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be use= d uninitialized in this function [-Werror=3Dmaybe-uninitialized] drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be use= d uninitialized in this function [-Werror=3Dmaybe-uninitialized] drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be use= d uninitialized in this function [-Werror=3Dmaybe-uninitialized] The code has existed in this exact form at least since v2.6.12, and the warning seems correct. This uses named initializers to ensure we initialize all members of the structure. Signed-off-by: Arnd Bergmann Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/advansys.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 969469261353..42a14c456da0 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c @@ -6482,18 +6482,17 @@ static uchar AscGetSynPeriodIndex(ASC_DVC_VAR *asc_= dvc, uchar syn_time) static uchar AscMsgOutSDTR(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar sdtr_offset) { - EXT_MSG sdtr_buf; - uchar sdtr_period_index; - PortAddr iop_base; - - iop_base =3D asc_dvc->iop_base; - sdtr_buf.msg_type =3D EXTENDED_MESSAGE; - sdtr_buf.msg_len =3D MS_SDTR_LEN; - sdtr_buf.msg_req =3D EXTENDED_SDTR; - sdtr_buf.xfer_period =3D sdtr_period; + PortAddr iop_base =3D asc_dvc->iop_base; + uchar sdtr_period_index =3D AscGetSynPeriodIndex(asc_dvc, sdtr_period); + EXT_MSG sdtr_buf =3D { + .msg_type =3D EXTENDED_MESSAGE, + .msg_len =3D MS_SDTR_LEN, + .msg_req =3D EXTENDED_SDTR, + .xfer_period =3D sdtr_period, + .req_ack_offset =3D sdtr_offset, + }; sdtr_offset &=3D ASC_SYN_MAX_OFFSET; - sdtr_buf.req_ack_offset =3D sdtr_offset; - sdtr_period_index =3D AscGetSynPeriodIndex(asc_dvc, sdtr_period); + if (sdtr_period_index <=3D asc_dvc->max_sdtr_index) { AscMemWordCopyPtrToLram(iop_base, ASCV_MSGOUT_BEG, (uchar *)&sdtr_buf, --=20 2.14.1