Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp2918931pxb; Tue, 24 Aug 2021 10:35:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyItLKwYSsLfF0j2Sk9+Tpu5xR1uBLjYTnnrazS8NbgW/AZ0YV33SUWT04GwU1qEndNuDjx X-Received: by 2002:a05:6e02:5c8:: with SMTP id l8mr28114847ils.282.1629826519731; Tue, 24 Aug 2021 10:35:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629826519; cv=none; d=google.com; s=arc-20160816; b=VIQsa2/e8188vilSqkqy+CqQ0x9X2wBoHJrcMEC1W8NPyYFUeBYHZozZsJp3LownQh FbUzqEaKgf5Ltx5LRf7pdSWa48ZQhlOgwKP7/MVmfJLLRrJ5PS4H6sZGeIDGpGkt47fs sZrM3n7hIfwLuJzyOLh59ANBczMqdNPXyluZho4SIROWAQ9p643JPZ9BjyFjSDxQfq/S gQ3EtajjHQuZmFHhx3lG53Sy6oplu0Gun34SdCgUSgZqtHGfizXoytvs9vUBXrxU4yA5 RFI+MaUv2DYQ2mZZ1rFFhGpUEotjLNtEPqTZzl5ApTU5dz40p3RgW1ZMgs27wUs7aWGt l+Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=t6w7cIhO9UuGVl6JYsUkRHOBym3Oz4osq+vwKnxoG1k=; b=OmL6EUDxTqEjAAqMTHIFrW8yidpOr/n0TMZJ/+y0o/YP3WMTjXgLAknMyzg4srpla9 WwdV+cyrg5h4Nvksi/m1mZNDVFxx2eOP0huIqUjUuU+x1IwuQQnplBDIjEGBj/uvHD7c 6TQq0oP+J1/+PHUb5+oY+IzDAlv4/W6YTpCcGTvnKaHeva69hJFgPhapUDCNoAbLEADZ Bp1H9PAERv/Drn6v55Uw7Vg4KqceYcE3oCnepSpAAVuPw8m6VA1lIZjbIUVnFNTRVH8E NDSW4Idwm6XzfNQ2dmqZr7kc3gbPkE5w0nx8z2GR4iDq98q3/vcqCDi7uOBl614x7WRo Z4bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=MATMF6rK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g2si17723852iob.28.2021.08.24.10.35.04; Tue, 24 Aug 2021 10:35:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=MATMF6rK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241534AbhHXRdD (ORCPT + 99 others); Tue, 24 Aug 2021 13:33:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:35178 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240171AbhHXRaE (ORCPT ); Tue, 24 Aug 2021 13:30:04 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 677AA6187D; Tue, 24 Aug 2021 17:05:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629824739; bh=qHc2rfSYFv/TMHp2CozCBZWjbBMZ0+ljM3C6bgtbvcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MATMF6rKtzqaPZB+wVWY/5khd+DRtO/jci+ddPNxJlq5nP3QIimeT1K+WMlj4emMz Jyw7ffJHhNrprjrHkR2F0wPG5/7ylRGqRY1Nez/zwD3ieQPrCbI15mzi0pBgeULWkI iWzuseLBLllldYqEknQZG4L6Z3E/IHt+d5p9WodMBKC24BhoW7eudN/ZOq6S3EFyGZ 7guNRnvW0ncHdSEHredShfUr0+azEEwYCv0xrpFf1ADx+BZz2EXkUpa4JYO3QO9wV9 fs60jzi2xT/zuTlarVakjxDdGVyd3TrpWrNC2rKjEM1LzZwTxM3rEAKBUW/PrUCkNN ciyr9ReXxjB8Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Harshvardhan Jha , Sumit Saxena , "Martin K . Petersen" , Sasha Levin Subject: [PATCH 4.14 42/64] scsi: megaraid_mm: Fix end of loop tests for list_for_each_entry() Date: Tue, 24 Aug 2021 13:04:35 -0400 Message-Id: <20210824170457.710623-43-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210824170457.710623-1-sashal@kernel.org> References: <20210824170457.710623-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.245-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.14.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.14.245-rc1 X-KernelTest-Deadline: 2021-08-26T17:04+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Harshvardhan Jha [ Upstream commit 77541f78eadfe9fdb018a7b8b69f0f2af2cf4b82 ] The list_for_each_entry() iterator, "adapter" in this code, can never be NULL. If we exit the loop without finding the correct adapter then "adapter" points invalid memory that is an offset from the list head. This will eventually lead to memory corruption and presumably a kernel crash. Link: https://lore.kernel.org/r/20210708074642.23599-1-harshvardhan.jha@oracle.com Acked-by: Sumit Saxena Signed-off-by: Harshvardhan Jha Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/megaraid/megaraid_mm.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/megaraid/megaraid_mm.c b/drivers/scsi/megaraid/megaraid_mm.c index 65b6f6ace3a5..8ec308c5970f 100644 --- a/drivers/scsi/megaraid/megaraid_mm.c +++ b/drivers/scsi/megaraid/megaraid_mm.c @@ -250,7 +250,7 @@ mraid_mm_get_adapter(mimd_t __user *umimd, int *rval) mimd_t mimd; uint32_t adapno; int iterator; - + bool is_found; if (copy_from_user(&mimd, umimd, sizeof(mimd_t))) { *rval = -EFAULT; @@ -266,12 +266,16 @@ mraid_mm_get_adapter(mimd_t __user *umimd, int *rval) adapter = NULL; iterator = 0; + is_found = false; list_for_each_entry(adapter, &adapters_list_g, list) { - if (iterator++ == adapno) break; + if (iterator++ == adapno) { + is_found = true; + break; + } } - if (!adapter) { + if (!is_found) { *rval = -ENODEV; return NULL; } @@ -739,6 +743,7 @@ ioctl_done(uioc_t *kioc) uint32_t adapno; int iterator; mraid_mmadp_t* adapter; + bool is_found; /* * When the kioc returns from driver, make sure it still doesn't @@ -761,19 +766,23 @@ ioctl_done(uioc_t *kioc) iterator = 0; adapter = NULL; adapno = kioc->adapno; + is_found = false; con_log(CL_ANN, ( KERN_WARNING "megaraid cmm: completed " "ioctl that was timedout before\n")); list_for_each_entry(adapter, &adapters_list_g, list) { - if (iterator++ == adapno) break; + if (iterator++ == adapno) { + is_found = true; + break; + } } kioc->timedout = 0; - if (adapter) { + if (is_found) mraid_mm_dealloc_kioc( adapter, kioc ); - } + } else { wake_up(&wait_q); -- 2.30.2