From nobody Mon Jun 8 19:55:33 2026 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70BB03C1F; Wed, 27 May 2026 03:27:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=124.126.103.232 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779852472; cv=none; b=VBdmEv2ikmqDhxyjDaTgWUGUrPjCcyF20PXHBWnugu8ht/lkQ5XZ6ipt+PHHJ/wyVF/vEMxR8iuX0r9kC/5tPx7nTay9/NdxFsFzkhGBqS7e4RRPYhT/ERg3wNKBj0j/wBPVPdbcKlh5at+l6ITe0TawlTVwwEMUevknT7IbPbY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779852472; c=relaxed/simple; bh=YkzkOrylA8nEm2aG/s/kNWb70b8eyU8VaWurgGh5W6Q=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=rRC84iaKNv7L+JTpJT3fxivrUhyd2eyr8FLB90ms3ovwZcuoyn5Z3qTH+ru2i8OVuctt0iaZWdjssgTDfCn11watKkUKrwW6YBGCV3rdsrivBIqdpAy33uvWqZVGZkUOj27hF+LHrGgqlvMg8oiRs8qeXqKYmFw4WQ59KbJx384= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=kylinos.cn; arc=none smtp.client-ip=124.126.103.232 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kylinos.cn X-UUID: 0646462c597c11f1aa26b74ffac11d73-20260527 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.12,REQID:5d6e16a5-20d6-46a5-a935-8d824ca7186a,IP:0,U RL:0,TC:0,Content:-5,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:-5 X-CID-META: VersionHash:e7bac3a,CLOUDID:17c385e481ab62dc0ddeb264f50a93d4,BulkI D:nil,BulkQuantity:0,Recheck:0,SF:102|850|865|898,TC:nil,Content:0|15|50,E DM:-3,IP:nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA :0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 0646462c597c11f1aa26b74ffac11d73-20260527 X-User: zenghongling@kylinos.cn Received: from localhost.localdomain [(10.44.16.150)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA with TLSv1.3 TLS_AES_256_GCM_SHA384 256/256) with ESMTP id 1647733651; Wed, 27 May 2026 11:27:44 +0800 From: Hongling Zeng To: hare@kernel.org, James.Bottomley@HansenPartnership.com, martin.petersen@oracle.com Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, zhongling0719@126.com, Hongling Zeng Subject: [PATCH] scsi: myrb: Fix region leak in hw_init functions Date: Wed, 27 May 2026 11:27:40 +0800 Message-Id: <20260527032740.520369-1-zenghongling@kylinos.cn> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When DAC960_PD_hw_init() and DAC960_P_hw_init() fail after successfully requesting the I/O region with request_region(), the region is not released before returning. This causes a resource leak. Fix this by using a common error label to release the I/O region before returning error codes, following the kernel's standard error handling pattern. Fixes: 081ff398c56c ("scsi: myrb: Add Mylex RAID controller (block interfac= e)") Signed-off-by: Hongling Zeng --- drivers/scsi/myrb.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c index 3678b66310ed..28cdf648783e 100644 --- a/drivers/scsi/myrb.c +++ b/drivers/scsi/myrb.c @@ -3111,6 +3111,7 @@ static int DAC960_PD_hw_init(struct pci_dev *pdev, { int timeout =3D 0; unsigned char error, parm0, parm1; + int ret =3D 0; =20 if (!request_region(cb->io_addr, 0x80, "myrb")) { dev_err(&pdev->dev, "IO port 0x%lx busy\n", @@ -3124,21 +3125,25 @@ static int DAC960_PD_hw_init(struct pci_dev *pdev, timeout < MYRB_MAILBOX_TIMEOUT) { if (DAC960_PD_read_error_status(base, &error, &parm0, &parm1) && - myrb_err_status(cb, error, parm0, parm1)) - return -EIO; + myrb_err_status(cb, error, parm0, parm1)) { + ret =3D -EIO; + goto out_release_region; + } udelay(10); timeout++; } if (timeout =3D=3D MYRB_MAILBOX_TIMEOUT) { dev_err(&pdev->dev, "Timeout waiting for Controller Initialisation\n"); - return -ETIMEDOUT; + ret =3D -ETIMEDOUT; + goto out_release_region; } if (!myrb_enable_mmio(cb, NULL)) { dev_err(&pdev->dev, "Unable to Enable Memory Mailbox Interface\n"); DAC960_PD_reset_ctrl(base); - return -ENODEV; + ret =3D -ENODEV; + goto out_release_region; } DAC960_PD_enable_intr(base); cb->qcmd =3D DAC960_PD_qcmd; @@ -3146,6 +3151,10 @@ static int DAC960_PD_hw_init(struct pci_dev *pdev, cb->reset =3D DAC960_PD_reset_ctrl; =20 return 0; + +out_release_region: + release_region(cb->io_addr, 0x80); + return ret; } =20 static irqreturn_t DAC960_PD_intr_handler(int irq, void *arg) @@ -3277,6 +3286,7 @@ static int DAC960_P_hw_init(struct pci_dev *pdev, { int timeout =3D 0; unsigned char error, parm0, parm1; + int ret =3D 0; =20 if (!request_region(cb->io_addr, 0x80, "myrb")) { dev_err(&pdev->dev, "IO port 0x%lx busy\n", @@ -3290,21 +3300,25 @@ static int DAC960_P_hw_init(struct pci_dev *pdev, timeout < MYRB_MAILBOX_TIMEOUT) { if (DAC960_PD_read_error_status(base, &error, &parm0, &parm1) && - myrb_err_status(cb, error, parm0, parm1)) - return -EAGAIN; + myrb_err_status(cb, error, parm0, parm1)) { + ret =3D -EAGAIN; + goto out_release_region; + } udelay(10); timeout++; } if (timeout =3D=3D MYRB_MAILBOX_TIMEOUT) { dev_err(&pdev->dev, "Timeout waiting for Controller Initialisation\n"); - return -ETIMEDOUT; + ret =3D -ETIMEDOUT; + goto out_release_region; } if (!myrb_enable_mmio(cb, NULL)) { dev_err(&pdev->dev, "Unable to allocate DMA mapped memory\n"); DAC960_PD_reset_ctrl(base); - return -ETIMEDOUT; + ret =3D -ETIMEDOUT; + goto out_release_region; } DAC960_PD_enable_intr(base); cb->qcmd =3D DAC960_P_qcmd; @@ -3312,6 +3326,10 @@ static int DAC960_P_hw_init(struct pci_dev *pdev, cb->reset =3D DAC960_PD_reset_ctrl; =20 return 0; + +out_release_region: + release_region(cb->io_addr, 0x80); + return ret; } =20 static irqreturn_t DAC960_P_intr_handler(int irq, void *arg) --=20 2.25.1