Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10787292imu; Thu, 6 Dec 2018 06:49:50 -0800 (PST) X-Google-Smtp-Source: AFSGD/VcveX9v9KyfECzsawtd7d/AVgsDF0ahHSk4H+cio7JhBVP+3m+eO0ttFAf1pj/YB8TmLNP X-Received: by 2002:a65:4904:: with SMTP id p4mr24492401pgs.384.1544107790180; Thu, 06 Dec 2018 06:49:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544107790; cv=none; d=google.com; s=arc-20160816; b=brPlHZSTp6N7d6UJ3UuJKHNWqiPt2Au7kzCAAMmDCNmfaGyDu0yLzDB/QKZfXFKhgp mlo6O6chPdrJW5zYKs92UOoSTYl6Bl9KX+2ljQUpQBQ5dPF4+AOOoI86smzUsCqpVSNB 0tvimkmCFBlsX2WtVzeEvKjg3KJWNer+FYy2/VALMNmXgPIpx6L4jQLMSr91WytH2kVj tbavJAxKuon/W3dfJown+Q29RkHWmp1bBbxkMgx6uqfJlOw1vJmO9Q09E5/NQ8WAQmpX kpgQl5uszT6CEO7L4rRbMV9a5ItMgSDq5uyuhC6EUzTZh8WeRqZ9cEc44rFZtWm/NVJ+ zR6w== 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=mBM5s4ZJcm9t1IQsLJoYdwb6xZxecnJo7JUeIOpNqQA=; b=uzgrglMnxt0RqdfkOqS3iRjF6/Kz7t4coTjeB5W38q1rKaXC6fywVUbBw+NWN4iMsc ftLa2jN4fCYRCvbXTNNd8z6obMkUmCrtcGa3GcDdLthZ69Wj74N9Gq3C9NHuuP1381ST PindmXQwEXkdCVqB944msk46uZzW9KMg9CO3mDKsqvKKkrIE592XCKn0mFL4ZbGDCpnb 0S3LNG4An1pb9YaPfVPGRhCyf12CUnr30ZoOu2PHprNYBYUUljICWDchi/rM2iBn8mur XdXhZ8pmUUjWjlbZ3uSbjvoaAxDK2KONscnDKyibWprXvv1M7FfGGjTrATWjgcHBtrER Tn8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=sPjm0yDL; 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 l8si424594pgr.345.2018.12.06.06.49.34; Thu, 06 Dec 2018 06:49:50 -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=sPjm0yDL; 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 S1731603AbeLFOsb (ORCPT + 99 others); Thu, 6 Dec 2018 09:48:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:53642 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731122AbeLFOs1 (ORCPT ); Thu, 6 Dec 2018 09:48:27 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 61C2120892; Thu, 6 Dec 2018 14:48:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544107706; bh=K0jhA+iyecQIcYRqnI3eVroai9GbN7HBUQWYpYf6PzM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sPjm0yDLWrvCc8FhC1eBBSgh96oKK9oeknZ3kNejPn+Mvxxv94lqeSVENZaksZiLX +bNS3ZHMls7S+RyR4k9UwdtZ+k0rFgSUbE+rdGQ6iThpwd8D4f4crUljuRNOV3EaA5 wnmY2LwW6q42AyGAy4hVDsSC1HDMUaaThQHfs3u8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Qu Wenruo , Su Yue , David Sterba , Ben Hutchings Subject: [PATCH 4.9 081/101] btrfs: tree-checker: Check level for leaves and nodes Date: Thu, 6 Dec 2018 15:39:20 +0100 Message-Id: <20181206143016.958032211@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181206143011.174892052@linuxfoundation.org> References: <20181206143011.174892052@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore 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 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Qu Wenruo commit f556faa46eb4e96d0d0772e74ecf66781e132f72 upstream. Although we have tree level check at tree read runtime, it's completely based on its parent level. We still need to do accurate level check to avoid invalid tree blocks sneak into kernel space. The check itself is simple, for leaf its level should always be 0. For nodes its level should be in range [1, BTRFS_MAX_LEVEL - 1]. Signed-off-by: Qu Wenruo Reviewed-by: Su Yue Reviewed-by: David Sterba Signed-off-by: David Sterba [bwh: Backported to 4.9: - Pass root instead of fs_info to generic_err() - Adjust context] Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/tree-checker.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c @@ -447,6 +447,13 @@ static int check_leaf(struct btrfs_root u32 nritems = btrfs_header_nritems(leaf); int slot; + if (btrfs_header_level(leaf) != 0) { + generic_err(root, leaf, 0, + "invalid level for leaf, have %d expect 0", + btrfs_header_level(leaf)); + return -EUCLEAN; + } + /* * Extent buffers from a relocation tree have a owner field that * corresponds to the subvolume tree they are based on. So just from an @@ -589,9 +596,16 @@ int btrfs_check_node(struct btrfs_root * unsigned long nr = btrfs_header_nritems(node); struct btrfs_key key, next_key; int slot; + int level = btrfs_header_level(node); u64 bytenr; int ret = 0; + if (level <= 0 || level >= BTRFS_MAX_LEVEL) { + generic_err(root, node, 0, + "invalid level for node, have %d expect [1, %d]", + level, BTRFS_MAX_LEVEL - 1); + return -EUCLEAN; + } if (nr == 0 || nr > BTRFS_NODEPTRS_PER_BLOCK(root)) { btrfs_crit(root->fs_info, "corrupt node: root=%llu block=%llu, nritems too %s, have %lu expect range [1,%u]",