Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp2158751iof; Tue, 7 Jun 2022 21:42:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwvlEn28OEq6uTI0u2OC600bcajLDzH7ameOgK3beh3ZC6+5XY93k/V7OGAx86WyS2vqWwl X-Received: by 2002:a05:6a00:1146:b0:4c9:ede0:725a with SMTP id b6-20020a056a00114600b004c9ede0725amr32890711pfm.35.1654663371398; Tue, 07 Jun 2022 21:42:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654663371; cv=none; d=google.com; s=arc-20160816; b=UyGl1Tv2RtjAacUZ5eDdvHkwHs7h7zZYIQ6UGQjYLVa8UVjhEiwOjxzsELlFIpHU7d 98MM3oqawIWZz1LKEVfk58SK2rNGbZwYgh+CE44ZCKzLaCxXSl7+0F2BA43WOznBzqv6 r0FZ5stUoMUackir6anAqy0jomcW4N7MC/IM21L0D8aKit6H2gYmcs68nFF3DJpgHjW5 5+Iqcr8bqgxPt+mcTYCtLEV7h2/Q2+7b4eltbOIgXmN/HL3aekv4JbLLRA41HQTTTlJT WnTIijt+Wbgs7fglv5UmgFNk7EBXkMvYSPr1DcvwOfhKZe2ym7xBHMRJunoRGHCCB2J9 UUNQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=gGdjrV7hwtB//oZ08Ja2HAdD99c79G9Kvk+YqNfOoV8=; b=z7r8Xz11vpGrRIb6BEfj0kLqAXWn/55zVXWbPPkMtxiVUySNvsQrbCd17ggmk4PY19 nAHh8OCmp5L29k+6zuH3apguCkeVOSMFhNaHBSK1Q+6zKrHglbTjI4Gju6AmP77yMeH5 se8vR3mwYxHV1sFv5jbZOn2Ga0KSqTnzAVoTpiwnadlCywSzpZLo5gHR4EJixTHO7EFZ G20TJui+vEO60yLIqpvwTISUlwYX25zb/ZSnjPyh3Uv82MX547r1ovmtfw9c6FWsxzGI ufenf4jVYBr3D94gHuJN5JpwzAfzsN9cK3fEVmUTu5tkJPXHNPsfrVZIZRznEs4xuAMS GXcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zzWabCBl; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id q23-20020a170902b11700b00167895f9696si7465737plr.210.2022.06.07.21.42.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 21:42:51 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zzWabCBl; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 47A3239B92; Tue, 7 Jun 2022 21:12:56 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381722AbiFGVs2 (ORCPT + 99 others); Tue, 7 Jun 2022 17:48:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377765AbiFGUzB (ORCPT ); Tue, 7 Jun 2022 16:55:01 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9B0BC122941; Tue, 7 Jun 2022 11:43:53 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id C88F1B82182; Tue, 7 Jun 2022 18:43:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37FE4C385A2; Tue, 7 Jun 2022 18:43:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1654627430; bh=zyHBjtWmeltoG4MsA143KLpITBEpT4pPYKPnK57y5HU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zzWabCBlAaJeofzY5T2NpuVKc0rDjGBibwyjZcxDkanQWabz12F8+kqPUESJNQ4Xh O5FFpp7HhIdy/olycIfhgWx4dznQB8L/3VVNg4bgruS5zcU5SgdDI4GGQ/PW24oDYN q0h5eA8KZNJtdJIDtJ9omFWztqghLG99YZ9UELHk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Guoqing Jiang , Xiaomeng Tong , Goldwyn Rodrigues , Song Liu Subject: [PATCH 5.17 696/772] md: fix an incorrect NULL check in does_sb_need_changing Date: Tue, 7 Jun 2022 19:04:48 +0200 Message-Id: <20220607165009.560348606@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220607164948.980838585@linuxfoundation.org> References: <20220607164948.980838585@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Xiaomeng Tong commit fc8738343eefc4ea8afb6122826dea48eacde514 upstream. The bug is here: if (!rdev) The list iterator value 'rdev' will *always* be set and non-NULL by rdev_for_each(), so it is incorrect to assume that the iterator value will be NULL if the list is empty or no element found. Otherwise it will bypass the NULL check and lead to invalid memory access passing the check. To fix the bug, use a new variable 'iter' as the list iterator, while using the original variable 'rdev' as a dedicated pointer to point to the found element. Cc: stable@vger.kernel.org Fixes: 2aa82191ac36 ("md-cluster: Perform a lazy update") Acked-by: Guoqing Jiang Signed-off-by: Xiaomeng Tong Acked-by: Goldwyn Rodrigues Signed-off-by: Song Liu Signed-off-by: Greg Kroah-Hartman --- drivers/md/md.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2629,14 +2629,16 @@ static void sync_sbs(struct mddev *mddev static bool does_sb_need_changing(struct mddev *mddev) { - struct md_rdev *rdev; + struct md_rdev *rdev = NULL, *iter; struct mdp_superblock_1 *sb; int role; /* Find a good rdev */ - rdev_for_each(rdev, mddev) - if ((rdev->raid_disk >= 0) && !test_bit(Faulty, &rdev->flags)) + rdev_for_each(iter, mddev) + if ((iter->raid_disk >= 0) && !test_bit(Faulty, &iter->flags)) { + rdev = iter; break; + } /* No good device found. */ if (!rdev)