Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13340838ybl; Sun, 29 Dec 2019 09:40:08 -0800 (PST) X-Google-Smtp-Source: APXvYqyZVKbIFdXiTNtV6FOg4nMqGvNpb1UPbuLLcmHtCtVED8sQrzYTp7Y7sueEUWXooR2CHdSv X-Received: by 2002:a9d:6c92:: with SMTP id c18mr53993260otr.157.1577641208566; Sun, 29 Dec 2019 09:40:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577641208; cv=none; d=google.com; s=arc-20160816; b=vdGoFdwZBIxceKB4BJZxXIqcRL9vNoqAkQ+1u6RmLoYiiXGX6sAuowQCc1UrOKHi5p bpPAQUwexWYf1wxzcaNCCGBL9lpF4hLAN7Y1gWxhjdL1G1bsnb9pEwankxUN92wfh4wZ qnQx8yBgwN4iHlPsJdXeY4r1KwxBXY9vGaWAwCInPZkaprkusvV4nvn8nUu5IZZoNYCU K4JtzBZwXQ5t72dst/RfFOSRCAzfbAjUq8Br4ZuJuFLYWU0tAyzpOoKjxI+29Is0pmn8 Qm5/BsYm62EdMcGB9Ajt8Z3+LffLfQBQ+hl6RrBr/Nap5nfgZjozoMc1hUCb6Dfbjc4K jZjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=sZ/9RikciLJx9IBX5FzmsIPywyVD9PFEsIkFjlX9YVw=; b=t3FMVQz62LDNHyRFMBGhGXbaKvxoy0z4RmASse09S58bq6IefM62kRK1g7yGs5jqsf 0M/DqOQk+lXjic7az7BG7/Ln1zXaV11vA4u7mn4cLW+AjzoeDbkgcJ+m1mNOrDin2D8G 36ryaH+qs/nAm8VDStpnUG0jQ72/I2lonn5sOyR6XYNabPaxIK1xg6zvGIYoLkDbM6fr ZkzFWWbpf1AbEyLy42YcUFDqbpZvCEjB9PJE0/hIcH2W2f1kHK4ibj6kbDf3IhuM3kuC g+SOtwzD6nUYbhyStU017pPyez6Hy4yjfb89tStf21YmIMUifTtMkMo/y0NhE81tKvAm osZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aPkzb87b; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r65si19757103oig.69.2019.12.29.09.39.56; Sun, 29 Dec 2019 09:40:08 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aPkzb87b; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729729AbfL2Rit (ORCPT + 99 others); Sun, 29 Dec 2019 12:38:49 -0500 Received: from mail.kernel.org ([198.145.29.99]:36214 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729521AbfL2Rdx (ORCPT ); Sun, 29 Dec 2019 12:33:53 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4615C20722; Sun, 29 Dec 2019 17:33:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640832; bh=c15sxyYB7SoT9Non22x2h0tkHHoK/8IWuGc80z7r14I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aPkzb87b2jBEzBJrZySSHVUUqY3+IzuK+b61fTAIHOp33r0LhCNArt0QvVOi00GJb oDxGWxKKKGJKBgj6MrLGHpJmtdUWL1qNhS48BtIBnA+95C3+WxTi4bKaAXNGsVAd7L sM8YoTBTq9jSBGxYCaW1DeMhvV8yXjh050Uu1iB0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dan Carpenter , Coly Li , Jens Axboe , Sasha Levin Subject: [PATCH 4.19 157/219] bcache: fix static checker warning in bcache_device_free() Date: Sun, 29 Dec 2019 18:19:19 +0100 Message-Id: <20191229162532.327225338@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162508.458551679@linuxfoundation.org> References: <20191229162508.458551679@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Coly Li [ Upstream commit 2d8869518a525c9bce5f5268419df9dfbe3dfdeb ] Commit cafe56359144 ("bcache: A block layer cache") leads to the following static checker warning: ./drivers/md/bcache/super.c:770 bcache_device_free() warn: variable dereferenced before check 'd->disk' (see line 766) drivers/md/bcache/super.c 762 static void bcache_device_free(struct bcache_device *d) 763 { 764 lockdep_assert_held(&bch_register_lock); 765 766 pr_info("%s stopped", d->disk->disk_name); ^^^^^^^^^ Unchecked dereference. 767 768 if (d->c) 769 bcache_device_detach(d); 770 if (d->disk && d->disk->flags & GENHD_FL_UP) ^^^^^^^ Check too late. 771 del_gendisk(d->disk); 772 if (d->disk && d->disk->queue) 773 blk_cleanup_queue(d->disk->queue); 774 if (d->disk) { 775 ida_simple_remove(&bcache_device_idx, 776 first_minor_to_idx(d->disk->first_minor)); 777 put_disk(d->disk); 778 } 779 It is not 100% sure that the gendisk struct of bcache device will always be there, the warning makes sense when there is problem in block core. This patch tries to remove the static checking warning by checking d->disk to avoid NULL pointer deferences. Reported-by: Dan Carpenter Signed-off-by: Coly Li Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/md/bcache/super.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 14d381cc6d74..2d60bcdb5b9c 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -747,20 +747,28 @@ static inline int idx_to_first_minor(int idx) static void bcache_device_free(struct bcache_device *d) { + struct gendisk *disk = d->disk; + lockdep_assert_held(&bch_register_lock); - pr_info("%s stopped", d->disk->disk_name); + if (disk) + pr_info("%s stopped", disk->disk_name); + else + pr_err("bcache device (NULL gendisk) stopped"); if (d->c) bcache_device_detach(d); - if (d->disk && d->disk->flags & GENHD_FL_UP) - del_gendisk(d->disk); - if (d->disk && d->disk->queue) - blk_cleanup_queue(d->disk->queue); - if (d->disk) { + + if (disk) { + if (disk->flags & GENHD_FL_UP) + del_gendisk(disk); + + if (disk->queue) + blk_cleanup_queue(disk->queue); + ida_simple_remove(&bcache_device_idx, - first_minor_to_idx(d->disk->first_minor)); - put_disk(d->disk); + first_minor_to_idx(disk->first_minor)); + put_disk(disk); } bioset_exit(&d->bio_split); -- 2.20.1