Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp2905176pxb; Tue, 24 Aug 2021 10:17:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxHdp45063oKhcedoWMwpLX8ulG61+DIB+PI342P6u339nkQWL9tWApE6XUKAM/fBN9ZuwM X-Received: by 2002:a02:a78e:: with SMTP id e14mr1025659jaj.50.1629825423806; Tue, 24 Aug 2021 10:17:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629825423; cv=none; d=google.com; s=arc-20160816; b=CmygrSewXhKFMRxCAgI+tjg0jLnFqQCBwl2tVncex8T88X73VOmY2Xl+59c9PXw5aW rH7ROH9lOMDfRhLwMoz2TyZACZt0nCaU1KqxEQhD6T8on5ymCOMm+MMGCLVJtXBuPABR FwYmAF7B+1CcXVv2slppYTbMk/Fpe09fSo6RT/TWo041uXiohwyzDvvGZ9jAZU0/rYxN PsDxrznvkACi8iEb7gWmiOdDAHD4QBDuYpUfuJnN3CarpmQVb1rCUo0JmQqBgtJtMqtb cFE2pw6HvQpnQU8FQhFHKNdrQFtqU5JSwegVIi83DSIUdtadITWgkNM0maJfFPJH0rhf cwWA== 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=sFaGe6Fdywrd3foAI1aVACqGu+t4s22nY1jxzKv/wE0=; b=0geil/vwSrsNYtQfbUmFFAnnkrMA99OsGykQOXrIfMEBGTVZqJkVWas725EwfZX7Zo 1ztOo6pV7Kc8Xsq0Br70TGEmvJejcTlil7h7knywaTRP11+QGXZt0v4aIfC3OIO1S83a TzavQlSG1x24ZbB6ilBf0yWMgSCFANSjG3cj+2egwHmNYN/U9UOUvv1Q2r5qThw40fL1 7VN7gCCYZeXCt+5GdygOulMQL5IrltT9uCeXzlhdjyA6EZZHyoudQbv6y7fncmOOL/ld BFqzXcqLhNrpOg4hLdNbLsVYcaZFdsCigmyxnQ7ta0mX38X9C18AlYCdw5jEq/exyQhW IDPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ujQ8gR4o; 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 n22si17084014jaj.53.2021.08.24.10.16.52; Tue, 24 Aug 2021 10:17:03 -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=ujQ8gR4o; 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 S238653AbhHXRQi (ORCPT + 99 others); Tue, 24 Aug 2021 13:16:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:51256 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233847AbhHXRNF (ORCPT ); Tue, 24 Aug 2021 13:13:05 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9B55061A6F; Tue, 24 Aug 2021 17:01:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629824485; bh=3PJRue57pZulaQVtzSOeEWSj/FzuT3/x/imhPvTjLLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ujQ8gR4opkGCaLugoYmhBNBA5TflzStjTTNHCRGt6RrjdT0zX3Pt30thhAeKOuwGi /GOlTrfmamoBWiKfYep8LsgidSegKfbo0Vdr6/oVhmNxxghbtMJGBygzAZS+QrWnWL TYl/yL0DcHedZ6znO1Ev27Isd0ki7jx/BKeeh52jGe8x+yOb7jyXMnzY8gGsBeStoy nb4r5IY8fNkzg6+5dbqSjPYfz2688kH/YQgo7JqWw3qbDKDj5kRx4oiDdFuKmNIqJH /XHi37tuQKmX6N+y4MMy81EG4mhGvlorKoKHJUEqtTxTitInb8z5qiK9nszx6ayhAb 8MJyLlE0444aQ== 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 5.4 17/61] scsi: megaraid_mm: Fix end of loop tests for list_for_each_entry() Date: Tue, 24 Aug 2021 13:00:22 -0400 Message-Id: <20210824170106.710221-18-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210824170106.710221-1-sashal@kernel.org> References: <20210824170106.710221-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.143-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.143-rc1 X-KernelTest-Deadline: 2021-08-26T17:01+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 59cca898f088..fcfbf3343b64 100644 --- a/drivers/scsi/megaraid/megaraid_mm.c +++ b/drivers/scsi/megaraid/megaraid_mm.c @@ -246,7 +246,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; @@ -262,12 +262,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; } @@ -733,6 +737,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 @@ -755,19 +760,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