* [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u"
@ 2022-12-27 5:55 Qu Wenruo
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Qu Wenruo @ 2022-12-27 5:55 UTC (permalink / raw)
To: linux-btrfs
There is a regression caused by commit d729048be6ef ("btrfs-progs: stop
using btrfs_root_item_v0").
Just fix it and add a simple test case for it.
Qu Wenruo (2):
btrfs-progs: fix the wrong timestamp and UUID check for root items
btrfs-progs: misc-tests: add a test case to make sure uuid is
correctly reported
cmds/subvolume-list.c | 11 ++++++--
.../056-subvolume-list-uuid/test.sh | 28 +++++++++++++++++++
2 files changed, 37 insertions(+), 2 deletions(-)
create mode 100755 tests/misc-tests/056-subvolume-list-uuid/test.sh
--
2.39.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items
2022-12-27 5:55 [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" Qu Wenruo
@ 2022-12-27 5:55 ` Qu Wenruo
2022-12-27 6:36 ` Anand Jain
2022-12-28 12:04 ` Neal Gompa
2022-12-27 5:55 ` [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported Qu Wenruo
2023-01-02 13:02 ` [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" David Sterba
2 siblings, 2 replies; 7+ messages in thread
From: Qu Wenruo @ 2022-12-27 5:55 UTC (permalink / raw)
To: linux-btrfs
[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 <wqu@suse.com>
---
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);
--
2.39.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported
2022-12-27 5:55 [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" Qu Wenruo
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
@ 2022-12-27 5:55 ` Qu Wenruo
2022-12-28 12:05 ` Neal Gompa
2023-01-02 13:02 ` [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" David Sterba
2 siblings, 1 reply; 7+ messages in thread
From: Qu Wenruo @ 2022-12-27 5:55 UTC (permalink / raw)
To: linux-btrfs
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 <wqu@suse.com>
---
.../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
--
2.39.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
@ 2022-12-27 6:36 ` Anand Jain
2022-12-28 12:04 ` Neal Gompa
1 sibling, 0 replies; 7+ messages in thread
From: Anand Jain @ 2022-12-27 6:36 UTC (permalink / raw)
To: Qu Wenruo, linux-btrfs
On 12/27/22 13:55, Qu Wenruo wrote:
> [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 <wqu@suse.com>
> ---
> 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.
> + */
Reviewed-by: Anand Jain <anand.jain@oracle.com>
> otime = 0;
> ogen = 0;
> memset(uuid, 0, BTRFS_UUID_SIZE);
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
2022-12-27 6:36 ` Anand Jain
@ 2022-12-28 12:04 ` Neal Gompa
1 sibling, 0 replies; 7+ messages in thread
From: Neal Gompa @ 2022-12-28 12:04 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Tue, Dec 27, 2022 at 1:10 AM Qu Wenruo <wqu@suse.com> wrote:
>
> [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 <wqu@suse.com>
> ---
> 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);
> --
> 2.39.0
>
Resolves: rhbz#2156710
Reviewed-by: Neal Gompa <neal@gompa.dev>
--
真実はいつも一つ!/ Always, there's only one truth!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported
2022-12-27 5:55 ` [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported Qu Wenruo
@ 2022-12-28 12:05 ` Neal Gompa
0 siblings, 0 replies; 7+ messages in thread
From: Neal Gompa @ 2022-12-28 12:05 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Tue, Dec 27, 2022 at 1:10 AM Qu Wenruo <wqu@suse.com> wrote:
>
> 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 <wqu@suse.com>
> ---
> .../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
> --
> 2.39.0
>
Reviewed-by: Neal Gompa <neal@gompa.dev>
--
真実はいつも一つ!/ Always, there's only one truth!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u"
2022-12-27 5:55 [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" Qu Wenruo
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
2022-12-27 5:55 ` [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported Qu Wenruo
@ 2023-01-02 13:02 ` David Sterba
2 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-01-02 13:02 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Tue, Dec 27, 2022 at 01:55:06PM +0800, Qu Wenruo wrote:
> There is a regression caused by commit d729048be6ef ("btrfs-progs: stop
> using btrfs_root_item_v0").
>
> Just fix it and add a simple test case for it.
>
> Qu Wenruo (2):
> btrfs-progs: fix the wrong timestamp and UUID check for root items
> btrfs-progs: misc-tests: add a test case to make sure uuid is
> correctly reported
Added to devel, thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-02 13:07 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-27 5:55 [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" Qu Wenruo
2022-12-27 5:55 ` [PATCH 1/2] btrfs-progs: fix the wrong timestamp and UUID check for root items Qu Wenruo
2022-12-27 6:36 ` Anand Jain
2022-12-28 12:04 ` Neal Gompa
2022-12-27 5:55 ` [PATCH 2/2] btrfs-progs: misc-tests: add a test case to make sure uuid is correctly reported Qu Wenruo
2022-12-28 12:05 ` Neal Gompa
2023-01-02 13:02 ` [PATCH 0/2] btrfs-progs: fix the uuid report in "btrfs subvolume list -u" David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox