Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp6552693ybx; Mon, 11 Nov 2019 10:50:22 -0800 (PST) X-Google-Smtp-Source: APXvYqx6OWS8xbCTbFcspP0GjYp3/0BFjnUJ0vxZRG/ndWJxXLkTCOGXFZ0jAG4lVs8hTzqJhjiB X-Received: by 2002:a17:907:216e:: with SMTP id rl14mr24595193ejb.291.1573498222694; Mon, 11 Nov 2019 10:50:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573498222; cv=none; d=google.com; s=arc-20160816; b=rQ4fStU4I0NKJTjyplBv8G6XD0kHJR0TVEPaINkVoeDKrKmjocPYb2CxBh51xHwqW5 NFv76f/nlPDBtouA/ZigQMWcXj9uMyDULN5E4pcFjk9T/JkSCuXvtHI6c7NvqmQx8cLx 5pvh+suc2bq/+vq5lj9rHvkZH+UU3H/oFF1pIKhtcBdJt+ZZqvOPxfVMowT3nPOSgcEe Gpw3AhBBS51gwxopv3XUcneipnChJszBkEBPTqCUzb0BHNRNvwj9AwEWbMRTplx4iPTR pRV+K2c7JeG7KbgJeSkG/fesT61h4Ov0c7hMluSqVWwMDqrLL3e/wIaYOuRMhV5l3Br2 8+Tw== 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=lhDtXxkzJMFGJ13LV3v0r9MYBvmCyp/VGP+usXKt3Ro=; b=Cs7RdV7Fwq2WzFj08aU/cL1JTONlTOjsTR67GCYV03xbYuIi2RlEJaSPdEoSz1cCCD pJFWrAnTOef3uTAJXgnXp1kZqrEMEE+5z9tW1ScN0TQ5tvB575prE2IVWka2hMCW+RWe 56UlO9gixdRB9BmoSmSJzCXJSoUgMmbpemKemnIl0b3lzO3Mn273xphhX2NRQRP6CBWt 8U+lPwlCIgkzFnFyzms+yhSjeMUMmu3rFm1Zh8uue24j4aC8w5qcdOgdW6YcDizDF7Y9 QUuX4h3dkeLZ9gCEwSPi/dnIPpeV/DiSGrCED9PFY9WSUdny0AQ7orUyTbT8maEdjozA 4akw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=A1SvfjRP; 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 si11si9736977ejb.71.2019.11.11.10.49.58; Mon, 11 Nov 2019 10:50:22 -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=A1SvfjRP; 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 S1729123AbfKKStJ (ORCPT + 99 others); Mon, 11 Nov 2019 13:49:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:42336 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726834AbfKKStF (ORCPT ); Mon, 11 Nov 2019 13:49:05 -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 0A9552184C; Mon, 11 Nov 2019 18:49:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573498144; bh=orNErqbrr4tO6yUqJftFB1DtVa5WXG7SJAGvXxVIO44=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A1SvfjRPlprz5Ryj8QeUA/hbjBER5+EpOIPB00hCAlHCBA2Z/qC0EkDWTaAInS3w8 cXW7VSZrWm7zWV5cCNMfXoXljVOMAqO1S2+vwZ6gxWbMdf5bSPbPbPxnIrgueQYKFr XrTXEsMTcV41aqOL6tJ9BpdrJOnE6Z+xuAcT6Gj4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Anand Jain , Qu Wenruo , David Sterba Subject: [PATCH 5.3 036/193] btrfs: tree-checker: Fix wrong check on max devid Date: Mon, 11 Nov 2019 19:26:58 +0100 Message-Id: <20191111181503.665875209@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111181459.850623879@linuxfoundation.org> References: <20191111181459.850623879@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: Qu Wenruo commit 8bb177d18f114358a57d8ae7e206861b48b8b4de upstream. [BUG] The following script will cause false alert on devid check. #!/bin/bash dev1=/dev/test/test dev2=/dev/test/scratch1 mnt=/mnt/btrfs umount $dev1 &> /dev/null umount $dev2 &> /dev/null umount $mnt &> /dev/null mkfs.btrfs -f $dev1 mount $dev1 $mnt _fail() { echo "!!! FAILED !!!" exit 1 } for ((i = 0; i < 4096; i++)); do btrfs dev add -f $dev2 $mnt || _fail btrfs dev del $dev1 $mnt || _fail dev_tmp=$dev1 dev1=$dev2 dev2=$dev_tmp done [CAUSE] Tree-checker uses BTRFS_MAX_DEVS() and BTRFS_MAX_DEVS_SYS_CHUNK() as upper limit for devid. But we can have devid holes just like above script. So the check for devid is incorrect and could cause false alert. [FIX] Just remove the whole devid check. We don't have any hard requirement for devid assignment. Furthermore, even devid could get corrupted by a bitflip, we still have dev extents verification at mount time, so corrupted data won't sneak in. This fixes fstests btrfs/194. Reported-by: Anand Jain Fixes: ab4ba2e13346 ("btrfs: tree-checker: Verify dev item") CC: stable@vger.kernel.org # 5.2+ Signed-off-by: Qu Wenruo Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/tree-checker.c | 8 -------- 1 file changed, 8 deletions(-) --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c @@ -686,9 +686,7 @@ static void dev_item_err(const struct ex static int check_dev_item(struct extent_buffer *leaf, struct btrfs_key *key, int slot) { - struct btrfs_fs_info *fs_info = leaf->fs_info; struct btrfs_dev_item *ditem; - u64 max_devid = max(BTRFS_MAX_DEVS(fs_info), BTRFS_MAX_DEVS_SYS_CHUNK); if (key->objectid != BTRFS_DEV_ITEMS_OBJECTID) { dev_item_err(leaf, slot, @@ -696,12 +694,6 @@ static int check_dev_item(struct extent_ key->objectid, BTRFS_DEV_ITEMS_OBJECTID); return -EUCLEAN; } - if (key->offset > max_devid) { - dev_item_err(leaf, slot, - "invalid devid: has=%llu expect=[0, %llu]", - key->offset, max_devid); - return -EUCLEAN; - } ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item); if (btrfs_device_id(leaf, ditem) != key->offset) { dev_item_err(leaf, slot,