From 370dc5be9087d834ae7e39dfce8b7ee9d0bbb818 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Fri, 30 Dec 2022 08:59:38 -0500 Subject: [PATCH] Add fix to show UUID with "btrfs subvolume list -u" --- ...id-report-in-btrfs-subvolume-list--u.patch | 263 ++++++++++++++++++ btrfs-progs.spec | 12 +- 2 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 btrfs-progs-fix-the-uuid-report-in-btrfs-subvolume-list--u.patch diff --git a/btrfs-progs-fix-the-uuid-report-in-btrfs-subvolume-list--u.patch b/btrfs-progs-fix-the-uuid-report-in-btrfs-subvolume-list--u.patch new file mode 100644 index 0000000..a88da74 --- /dev/null +++ b/btrfs-progs-fix-the-uuid-report-in-btrfs-subvolume-list--u.patch @@ -0,0 +1,263 @@ +From patchwork Tue Dec 27 05:55:07 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Qu Wenruo +X-Patchwork-Id: 13082066 +Return-Path: +X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on + aws-us-west-2-korg-lkml-1.web.codeaurora.org +Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) + by smtp.lore.kernel.org (Postfix) with ESMTP id 8911CC46467 + for ; Tue, 27 Dec 2022 05:55:38 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S229701AbiL0Fzg (ORCPT ); + Tue, 27 Dec 2022 00:55:36 -0500 +Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57878 "EHLO + lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S229714AbiL0Fz3 (ORCPT + ); + Tue, 27 Dec 2022 00:55:29 -0500 +Received: from smtp-out1.suse.de (smtp-out1.suse.de + [IPv6:2001:67c:2178:6::1c]) + by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E7E721BD + for ; + Mon, 26 Dec 2022 21:55:28 -0800 (PST) +Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de + [192.168.254.74]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (P-521) server-digest + SHA512) + (No client certificate requested) + by smtp-out1.suse.de (Postfix) with ESMTPS id 45C6921A5C + for ; + Tue, 27 Dec 2022 05:55:27 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; + t=1672120527; + h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: + mime-version:mime-version: + content-transfer-encoding:content-transfer-encoding: + in-reply-to:in-reply-to:references:references; + bh=W+yG1hLkX0HTroE6JXqPksnhlQIJ9YKQGLBuZJfgc30=; + b=Kg/GuSk+LeFw8BPNKp+N4MKZJ68a/I2jA0xTGBldQpjMFUgu25Pv9+JhZ0vv+OL1eGJBPP + ZaB0/Pgl8pTvg3crpX2+ey7F1GYSJuzpF1kGNBjhrsTUT+ZMjgMZyFYR3E3nIWg6fL/Wwn + gzYuY194OxIuVaQoQgclh3Cd+B3fwuQ= +Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de + [192.168.254.74]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (P-521) server-digest + SHA512) + (No client certificate requested) + by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 979EB133F5 + for ; + Tue, 27 Dec 2022 05:55:26 +0000 (UTC) +Received: from dovecot-director2.suse.de ([192.168.254.65]) + by imap2.suse-dmz.suse.de with ESMTPSA + id mB1aGM6IqmMBRgAAMHmgww + (envelope-from ) + for ; Tue, 27 Dec 2022 05:55:26 +0000 +From: Qu Wenruo +To: linux-btrfs@vger.kernel.org +Subject: [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for + root items +Date: Tue, 27 Dec 2022 13:55:07 +0800 +Message-Id: + +X-Mailer: git-send-email 2.39.0 +In-Reply-To: +References: +MIME-Version: 1.0 +Precedence: bulk +List-ID: +X-Mailing-List: linux-btrfs@vger.kernel.org + +[BUG] +Since commit d729048be6ef ("btrfs-progs: stop using +btrfs_root_item_v0"), "btrfs subvolume list" not longer correctly report +UUID nor timestamp, while older (btrfs-progs v6.0.2) still works +correct: + + v6.0.2: + # btrfs subv list -u /mnt/btrfs/ + ID 256 gen 12 top level 5 uuid ed4af580-d512-2644-b392-2a71aaeeb99e path subv1 + ID 257 gen 13 top level 5 uuid a22ccba7-0a0a-a94f-af4b-5116ab58bb61 path subv2 + + v6.1: + # ./btrfs subv list -u /mnt/btrfs/ + ID 256 gen 12 top level 5 uuid - path subv1 + ID 257 gen 13 top level 5 uuid - path subv2 + +[CAUSE] +Commit d729048be6ef ("btrfs-progs: stop using btrfs_root_item_v0") +removed old btrfs_root_item_v0, but incorrectly changed the check for +v0 root item. + +Now we will treat v0 root items as latest root items, causing possible +out-of-bound access. while treat current root items as older v0 root +items, ignoring the UUID nor timestamp. + +[FIX] +Fix the bug by using correct checks, and add extra comments on the +branches. + +Issue: #562 +Fixes: d729048be6ef ("btrfs-progs: stop using btrfs_root_item_v0") +Signed-off-by: Qu Wenruo +Reviewed-by: Neal Gompa +--- + cmds/subvolume-list.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/cmds/subvolume-list.c b/cmds/subvolume-list.c +index 6d5ef509ae67..7cdb0402b8e5 100644 +--- a/cmds/subvolume-list.c ++++ b/cmds/subvolume-list.c +@@ -870,14 +870,21 @@ static int list_subvol_search(int fd, struct rb_root *root_lookup) + ri = (struct btrfs_root_item *)(args.buf + off); + gen = btrfs_root_generation(ri); + flags = btrfs_root_flags(ri); +- if(sh.len < +- sizeof(struct btrfs_root_item)) { ++ if(sh.len >= sizeof(struct btrfs_root_item)) { ++ /* ++ * The new full btrfs_root_item with ++ * timestamp and UUID. ++ */ + otime = btrfs_stack_timespec_sec(&ri->otime); + ogen = btrfs_root_otransid(ri); + memcpy(uuid, ri->uuid, BTRFS_UUID_SIZE); + memcpy(puuid, ri->parent_uuid, BTRFS_UUID_SIZE); + memcpy(ruuid, ri->received_uuid, BTRFS_UUID_SIZE); + } else { ++ /* ++ * The old v0 root item, which doesn't ++ * has timestamp nor UUID. ++ */ + otime = 0; + ogen = 0; + memset(uuid, 0, BTRFS_UUID_SIZE); + +From patchwork Tue Dec 27 05:55:08 2022 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Qu Wenruo +X-Patchwork-Id: 13082065 +Return-Path: +X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on + aws-us-west-2-korg-lkml-1.web.codeaurora.org +Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) + by smtp.lore.kernel.org (Postfix) with ESMTP id 66D93C10F1B + for ; Tue, 27 Dec 2022 05:55:37 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S229683AbiL0Fzg (ORCPT ); + Tue, 27 Dec 2022 00:55:36 -0500 +Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57884 "EHLO + lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S229719AbiL0Fza (ORCPT + ); + Tue, 27 Dec 2022 00:55:30 -0500 +Received: from smtp-out2.suse.de (smtp-out2.suse.de + [IPv6:2001:67c:2178:6::1d]) + by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6FED5FCB + for ; + Mon, 26 Dec 2022 21:55:29 -0800 (PST) +Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de + [192.168.254.74]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (P-521) server-digest + SHA512) + (No client certificate requested) + by smtp-out2.suse.de (Postfix) with ESMTPS id 523105FE4D + for ; + Tue, 27 Dec 2022 05:55:28 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; + t=1672120528; + h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: + mime-version:mime-version: + content-transfer-encoding:content-transfer-encoding: + in-reply-to:in-reply-to:references:references; + bh=2gNyMjFYBxP2ubq4bugStueaD9klIpECbWiDJBw6lSo=; + b=GXtDFnlrJed2boT5ndRx17OF5an5YXUma/0eZnrkDiDdHBwunCDXHyM0g5knvu4TQLxD1G + OFzV/pP5MfDZ00PL8qPbWBgnTQtaFW+xXnpVK+0q1e0Lqi03F6l84VjcZX593WEfqq9Ece + njWGIwC2yADcBBSsXoe0EnPAYh6KbMA= +Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de + [192.168.254.74]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (P-521) server-digest + SHA512) + (No client certificate requested) + by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id A6A2E133F5 + for ; + Tue, 27 Dec 2022 05:55:27 +0000 (UTC) +Received: from dovecot-director2.suse.de ([192.168.254.65]) + by imap2.suse-dmz.suse.de with ESMTPSA + id qEYYHM+IqmMBRgAAMHmgww + (envelope-from ) + for ; Tue, 27 Dec 2022 05:55:27 +0000 +From: Qu Wenruo +To: linux-btrfs@vger.kernel.org +Subject: [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure + uuid is correctly reported +Date: Tue, 27 Dec 2022 13:55:08 +0800 +Message-Id: + <6b439939b69d08debf357e7b9d7a5b3ef8ae6b4b.1672120480.git.wqu@suse.com> +X-Mailer: git-send-email 2.39.0 +In-Reply-To: +References: +MIME-Version: 1.0 +Precedence: bulk +List-ID: +X-Mailing-List: linux-btrfs@vger.kernel.org + +The new test case will execute "btrfs subvolume list -u" on the newly +create btrfs. + +Since the v0 root item is already deprecated for a long time, newly +created btrfs should be already using the new root item, thus "btrfs +subvolume list -u" should always report the correct uuid. + +The test case relies on external program "uuidparse" which should be +provided by util-linux. + +Signed-off-by: Qu Wenruo +Reviewed-by: Neal Gompa +--- + .../056-subvolume-list-uuid/test.sh | 28 +++++++++++++++++++ + 1 file changed, 28 insertions(+) + create mode 100755 tests/misc-tests/056-subvolume-list-uuid/test.sh + +diff --git a/tests/misc-tests/056-subvolume-list-uuid/test.sh b/tests/misc-tests/056-subvolume-list-uuid/test.sh +new file mode 100755 +index 000000000000..45f4f956c25f +--- /dev/null ++++ b/tests/misc-tests/056-subvolume-list-uuid/test.sh +@@ -0,0 +1,28 @@ ++#!/bin/bash ++# ++# Make sure "btrfs subvolume list -u" shows uuid correctly ++ ++source "$TEST_TOP/common" ++ ++check_prereq mkfs.btrfs ++check_prereq btrfs ++check_global_prereq uuidparse ++ ++setup_root_helper ++prepare_test_dev ++ ++tmp=$(_mktemp_dir list_uuid) ++ ++run_check_mkfs_test_dev ++run_check_mount_test_dev ++run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/subv1" ++run_check_stdout $SUDO_HELPER "$TOP/btrfs" subvolume list -u "$TEST_MNT" |\ ++ cut -d\ -f9 > "$tmp/output" ++ ++result=$(cat "$tmp/output" | uuidparse -o TYPE -n) ++rm -rf -- "$tmp" ++ ++if [ "$result" == "invalid" ]; then ++ _fail "subvolume list failed to report uuid" ++fi ++run_check_umount_test_dev diff --git a/btrfs-progs.spec b/btrfs-progs.spec index b8bb3b5..0116a96 100644 --- a/btrfs-progs.spec +++ b/btrfs-progs.spec @@ -3,7 +3,7 @@ Name: btrfs-progs Version: 6.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Userspace programs for btrfs License: GPLv2 @@ -12,8 +12,13 @@ Source0: https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{n Source1: https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{name}-v%{version_no_tilde}.tar.sign Source2: gpgkey-F2B41200C54EFB30380C1756C565D5F9D76D583B.gpg +# Fixes pending upstream +## From: https://patchwork.kernel.org/project/linux-btrfs/list/?series=707080 +Patch0101: btrfs-progs-fix-the-uuid-report-in-btrfs-subvolume-list--u.patch + BuildRequires: gnupg2 BuildRequires: gcc, autoconf, automake, make +BuildRequires: git-core BuildRequires: e2fsprogs-devel BuildRequires: libacl-devel, lzo-devel BuildRequires: pkgconfig(blkid) @@ -87,7 +92,7 @@ btrfs filesystem-specific programs in Python. %prep xzcat '%{SOURCE0}' | %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data=- -%autosetup -n %{name}-v%{version_no_tilde} -p1 +%autosetup -n %{name}-v%{version_no_tilde} -S git_am %build ./autogen.sh @@ -146,6 +151,9 @@ popd %{python3_sitearch}/btrfsutil-*.egg-info/ %changelog +* Fri Dec 30 2022 Neal Gompa - 6.1-2 +- Add fix to show UUID with "btrfs subvolume list -u" + * Fri Dec 23 2022 Neal Gompa - 6.1-1 - Update to 6.1 - Use libgcrypt for cryptographic hash functions