From patchwork Wed May 25 19:14:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Lawrence X-Patchwork-Id: 9136099 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 712B26075C for ; Wed, 25 May 2016 19:14:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 64C6228110 for ; Wed, 25 May 2016 19:14:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5935928299; Wed, 25 May 2016 19:14:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E395228110 for ; Wed, 25 May 2016 19:14:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751761AbcEYTOq (ORCPT ); Wed, 25 May 2016 15:14:46 -0400 Received: from mail-by2on0130.outbound.protection.outlook.com ([207.46.100.130]:28352 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751485AbcEYTOo (ORCPT ); Wed, 25 May 2016 15:14:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=StratusTechnologies.onmicrosoft.com; s=selector1-stratus-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=zTBV+GeGN7o242fiyRHDfjFTzJR2Cjm1VgZPGSt8xDs=; b=Yj2lPln8AeEGmjlSm0eGnr7wnDanuJsSo0C6kxaMBXrFaSc4c8bdOWYMEk/m+LQL1JVKKVsGGdNB9cP5dB2F5d9XsTLjxzcO/MWY+5SzqD+dpFlVWZ70SwQYLZZ9AXPEyaOfKVd/0LWMKIfDy4y0SyDJ9aeWlUSxK/ocexMEKpE= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=stratus.com; Received: from jlaw-desktop.mno.stratus.com (198.97.42.5) by CO2PR0801MB2248.namprd08.prod.outlook.com (10.166.214.144) with Microsoft SMTP Server (TLS) id 15.1.492.4; Wed, 25 May 2016 19:14:41 +0000 From: Joe Lawrence To: CC: , , , Joe Lawrence Subject: [PATCH 1/2] mpt3sas - set num_phys after allocating phy[] space Date: Wed, 25 May 2016 15:14:28 -0400 Message-ID: <1464203669-31974-2-git-send-email-joe.lawrence@stratus.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1464203669-31974-1-git-send-email-joe.lawrence@stratus.com> References: <1464203669-31974-1-git-send-email-joe.lawrence@stratus.com> MIME-Version: 1.0 X-Originating-IP: [198.97.42.5] X-ClientProxiedBy: DM2PR10CA0112.namprd10.prod.outlook.com (10.162.31.38) To CO2PR0801MB2248.namprd08.prod.outlook.com (10.166.214.144) X-MS-Office365-Filtering-Correlation-Id: 3ac69e13-924d-4372-6cf1-08d384d0d2f8 X-Microsoft-Exchange-Diagnostics: 1; CO2PR0801MB2248; 2:wpInnfQHifHIzwXjZOs38bK6LZWzAjkDWUabPH8LPF0YP87xcG9bIs5f7aD7zVuExJcffPHjWQanB0ecaQVZumkS7uigYvX+0QGA/VzypMnVCs6K0Tg6gL3CDe25jFq74zqftS7356VFiVW2uixjXMJ8j/zCPwnoxHmmtfXC1eYEbhtGZqcl6/lfau/1LZG7; 3:qpuCxlcStx/9V5wfcBIRcpY10LjvfJb6wfAcj0fgr/KIatoqAY0JL48/s7nv4d1Jagt3cBSoTYC+woaMi1OWYRe3weskh/mZX4YcyKqPEbNThPWYop/8DW2z1NComEhL; 25:RrhN1GJdViXd07A8d+H9FfBDxZjQJiecWRpDXDU6gT01Jxne+XBPikE7EVkQ5gKo8SK14eUvaBDmiaaV+XObcUyfQI8INPzNSiDUEICE3zSUDzLr46Ocl3avlw6pS7chOxeHE/Lt2CNo+CbLVA7vrNJafXf0veom+RhGB+tGnwIREvoGQEktAKaR2z3vgg7Eym8nzw3719s/Luevmj7ISbvk0OX0IVeAjpmnA4m5oR70g9gX7S1FPRUNQNJ06MiMZbnAUdN2JH5YPv4eAJ1k6yaLDDqqSOMzeBw0hVm+poL6/A0I+b5W1ULJDgc0fgyY3snJrmUgJhstLkpQC+0Ky3eKXk6EmxNlT5e+slmVxr21qUGjxcDCEX5+rnNjpl1qf5CIVrVoYgOgc0z2BDbe5Ixg/2M6tz3v69YTbN0mxME= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CO2PR0801MB2248; X-Microsoft-Exchange-Diagnostics: 1; CO2PR0801MB2248; 20:cUrw35AtIMhBWnUZp22RCRVm7Os/94NPk7eiz6HZOfmEiF/+46IO98iRLpHP0MD1S/eURsFHiHu4FTU+s+YIK88d31JWq+Jcwym9PhT6p7iuHq+RCPVJ8yfTkDGCul69FnAnRReFkEUBBaZdcCsFdTia1whyTx92ylFvjRYR2Ppm0ryeJxndi9XJULCGRqWGdc+w0qL8L49bgpzsCkY8QYxEEKpQY09ffESJ/4QcCaQ+GkZaM0E8ZLuf60/zdC5D/T3dp10UbZMbxT0MSRqM3IK7/jDDg6/1zJn3M9YE0vChisE4M40BZ+7XRCv3PkEL03GGKSGRJtMgBByc8aoyZgE7ZHtt9oFGHDTS2pYO6VFiKp6fWsoBHQOjBsmzO3efj20zNP6B9h6AasHjX1T7dyImBcvwXpEWc8syoo8MODWEMKtgdjwV9Cu72HJdh8vp8Q0caevziMyNFeGYp/aMVZ2p8MDhQFs8MlbumVEyYRYXGVL/8adiS77B7W508j+G; 4:bLiKd0nKq9xhf4FG4RyNPkxfkDstZub0UHheedetYzsFlJUR+GDJeFlb2A0ufXEy/3WoiRPTq3SkozEpEsIRk3EOcyy+s66x7i5Y/Q+eRYEU27DSuom84/BIzO/R4sb4PJljThP6U9BtUq24PvcgmX4oJCBpAZakzPOh9IXLVHvkJR5ZfE0OlFsop24ECxqyLBFKciwrgamL8EBCt6AfVKt5TQ2QVBZJbeMSO6LewoieIUKcMSS3TzLwpk2Es51rIGhX5VfNJEFKZdC8h4o9vdYDDnrj3e2toewFTysJVtrwzN+6NZQuI3LlLV/y6FGkAW2JqiKKgpLaM57jH7zqcSLjlUadPfeRnqvSKheP3LBqwTZg1XICATB1PMm/HeTd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:CO2PR0801MB2248; BCL:0; PCL:0; RULEID:; SRVR:CO2PR0801MB2248; X-Forefront-PRVS: 09538D3531 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(4001430100002)(42186005)(66066001)(33646002)(50986999)(110136002)(107886002)(189998001)(76176999)(50226002)(92566002)(5008740100001)(2906002)(6116002)(3846002)(36756003)(586003)(47776003)(4326007)(8676002)(81166006)(229853001)(50466002)(77096005)(2351001)(5003940100001)(19580405001)(19580395003)(2950100001)(575784001)(5004730100002)(42413003)(32563001)(4720700001); DIR:OUT; SFP:1102; SCL:1; SRVR:CO2PR0801MB2248; H:jlaw-desktop.mno.stratus.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO2PR0801MB2248; 23:lqSv1ExARSXofKjvK85R8Wnv9PUHHmr5hz69THH?= =?us-ascii?Q?kyAo/90xxlqF+P88bSy6W3TvM0ohQ3z9rg9jSI+DdbcMPmva7zPMbh8Y/m2P?= =?us-ascii?Q?YPK1T2/iBbNUuK7T4nVmi7gBHMukEfVsdRyrL7rKBsgxsaZt4ALXjuYaY3NR?= =?us-ascii?Q?dGxBFXBqSRWW/7ghlJg+5S6gXSRPdlDHX1y5D4jW4fbDQN8CvAi0JVb9u1b0?= =?us-ascii?Q?Dp/eJg9P/rf4lE1YBgoXbB48KWHB0ZH2H00IbEN5ClnCrEYzCZuZvQWEWdsa?= =?us-ascii?Q?Xe8gbQxv4LIFzJwKK0rafrM9IveKeidrsEOWIITjcLMieUqdDlKRu5a+tZTz?= =?us-ascii?Q?pjYW2SZmwdE1ZRlLsYU+bHs3neAWCrsqzJq1j6jfctZ4sYVX6CwQ8FVqsCF8?= =?us-ascii?Q?rgPL4L71YwuOyw0P0dKHTZACuSMvfG+juJ6rRa5xoTlZ9axT8qzPQ88aQOYj?= =?us-ascii?Q?JsjGKb2mGdBzm2c1dpKNfDc4uDHNTlLolxqW+868aQIKdmwr7J3a2gzCim4l?= =?us-ascii?Q?LV+1TPStsK2EolOoyJqvnqZHuNU3QH7qepJSFiP6SW7kqKtpWJJWd3UTcWpF?= =?us-ascii?Q?VcPTEQNxkR/YE1aeSwRSH7rcuS1FDzn2nQAv98zSTVN6lEuLI4UXPO41LoOu?= =?us-ascii?Q?hxcBVNeURyokn3VXQZE5As+WfbGV2TL60qnkIx2bK5SH6SQpMGm1koJ3Yc+Y?= =?us-ascii?Q?k2otVYhAnmQL135RkiARnq3ECWwXv0ld2dVSgRiw5GJJpHGxGBs3DtkztI37?= =?us-ascii?Q?Yj9G6UvF7iwknO0IG0JgIueO5XpHw5sqObiqGh7hoylbR4szt08qGjVpmSxF?= =?us-ascii?Q?WnaQRUE6pNarkTPW+sq5Wc/OKrOFSzMVL/uy5wt9ZBhueLwpjV1KXX6q/SUA?= =?us-ascii?Q?qQAZ/9U3tfQKeEWWMDWZei0rRN8X26Q9Mv4f1aHM1Q3ZFTV2K9VlWGshsZ37?= =?us-ascii?Q?dWMNgodUsfcda487TWaru+m63ZPSkkNfwE8JBAsJ2LJXd7256hIVDGd7IZvz?= =?us-ascii?Q?4uRk=3D?= X-Microsoft-Exchange-Diagnostics: 1; CO2PR0801MB2248; 5:D/6Z/3bYYuFkwJtY04RAw0r2Fd9fAbX156sS2dmYB4J6oOWTdgHOlFlkwrAuz+nWiaVTRlz/PNOAc3/EkIVMEKU7jy1Ckuj0TyghUXI44Vnv2QbKSG93MRgiyxlrWRzIp1G8otPonKJ4sfL4TN+x5Q==; 24:n7+tRu9lB64EBNI+uTjM8yaQFHZxexCAyzxRuJCn9VxcqmbfymTKXnT9bUS0cPaO8/eW31GcWUvqazHAXSFdqkfE1r8WhsJb9DCUq7nyYAM=; 7:uTM8ndXFDbh3hj+cihmAz3F0Gjsx9zosdcd7JnPYT429ryH84AZCnDDIsRPSSSsaooz4gsDxmrl8XBW4Sr8QZjZE0zVbuQTCk1HvQddaQL4dQnBUXPBK936ieMBVWlWuNqroTaNuPG5IS4VjP+vTS1x+SDD9z6uYKlFgWnNXAsWTnd33U+ZcZyUYKgK8pZ05; 20:I4KiVATVvmQFybXGs/ZvWJuWz20USfUmP90mU3gdXQHbP/lmq7QSp/HkseH5iQjsreeLTvcZzpdZhIxhFe1F/0lCkXTB/FMDZ0ZDEGqNWZrlW9LR/KuFiZX7gr5tkJjLU/TmjLuO9vRBgMSSIL8xUSLqofefvz0k/CkkybETZ3s= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: stratus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 May 2016 19:14:41.0994 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR0801MB2248 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In _scsih_sas_host_add, the number of HBA phys are determined and then later used to allocate an array of struct _sas_phy's. If the routine sets ioc->sas_hba.num_phys, but then fails to allocate the ioc->sas_hba.phy array (by kcalloc error or other intermediate error/exit path), ioc->sas_hba is left in a dangerous state: all readers of ioc->sas_hba.phy[] do so by indexing it from 0..ioc->sas_hba.num_phys without checking that the space was ever allocated. Modify _scsih_sas_host_add to set ioc->sas_hba.num_phys only after successfully allocating ioc->sas_hba.phy[]. Signed-off-by: Joe Lawrence --- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index f2139e5604a3..6e36d20c9e0b 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -4893,13 +4893,22 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc) u16 ioc_status; u16 sz; u8 device_missing_delay; + u8 num_phys; - mpt3sas_config_get_number_hba_phys(ioc, &ioc->sas_hba.num_phys); - if (!ioc->sas_hba.num_phys) { + mpt3sas_config_get_number_hba_phys(ioc, &num_phys); + if (!num_phys) { pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, __func__); return; } + ioc->sas_hba.phy = kcalloc(num_phys, + sizeof(struct _sas_phy), GFP_KERNEL); + if (!ioc->sas_hba.phy) { + pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", + ioc->name, __FILE__, __LINE__, __func__); + goto out; + } + ioc->sas_hba.num_phys = num_phys; /* sas_iounit page 0 */ sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * @@ -4959,13 +4968,6 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc) MPI2_SASIOUNIT1_REPORT_MISSING_TIMEOUT_MASK; ioc->sas_hba.parent_dev = &ioc->shost->shost_gendev; - ioc->sas_hba.phy = kcalloc(ioc->sas_hba.num_phys, - sizeof(struct _sas_phy), GFP_KERNEL); - if (!ioc->sas_hba.phy) { - pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", - ioc->name, __FILE__, __LINE__, __func__); - goto out; - } for (i = 0; i < ioc->sas_hba.num_phys ; i++) { if ((mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, i))) {