From 267c1cc2d5ba2844eef9704209be6ff9790f1541 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Thu, 11 Jul 2024 15:57:38 -0400 Subject: [PATCH] Check meta flags bit set/unset for devices. This extra check assures the passed meta device and data device are indeed what they should be, and prevents against unwanted swapping or repeated duplicate device arguments. Signed-off-by: Auke Kok --- utils/src/change_format_version.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/utils/src/change_format_version.c b/utils/src/change_format_version.c index 1e5e1507..de84bf15 100644 --- a/utils/src/change_format_version.c +++ b/utils/src/change_format_version.c @@ -94,6 +94,18 @@ static int do_change_fmt_vers(struct change_fmt_vers_args *args) goto out; } + if ((le64_to_cpu(meta_super->flags) & SCOUTFS_FLAG_IS_META_BDEV) == 0) { + printf("device argument #1 is not a meta device (swap arguments?)\n"); + ret = -EINVAL; + goto out; + } + + if ((le64_to_cpu(data_super->flags) & SCOUTFS_FLAG_IS_META_BDEV) != 0) { + printf("device argument #2 is not a data device (swap arguments?)\n"); + ret = -EINVAL; + goto out; + } + if (le64_to_cpu(meta_super->fmt_vers) < SCOUTFS_FORMAT_VERSION_MIN || le64_to_cpu(meta_super->fmt_vers) > SCOUTFS_FORMAT_VERSION_MAX) { fprintf(stderr, "meta super block has format version %llu outside of supported version range %u-%u",