From: Johannes Thumshirn <jth@kernel.org>
To: David Sterba <dsterba@suse.cz>
Cc: "linux-btrfs @ vger . kernel . org" <linux-btrfs@vger.kernel.org>,
Johannes Thumshirn <johannes.thumshirn@wdc.com>,
Johannes Thumshirn <jthumshirn@suse.de>
Subject: [PATCH v2 4/5] btrfs-progs: add --auth-key to dump-super
Date: Thu, 14 May 2020 11:34:32 +0200 [thread overview]
Message-ID: <20200514093433.6818-5-jth@kernel.org> (raw)
In-Reply-To: <20200514093433.6818-1-jth@kernel.org>
From: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Add auth-key option for btrfs inspect-internal dump-super so we can dump an
authenticated super-block and check for it's integrity.
Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
---
cmds/inspect-dump-super.c | 35 ++++++++++++++++++++++++-----------
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/cmds/inspect-dump-super.c b/cmds/inspect-dump-super.c
index dd42d180..1bc806e9 100644
--- a/cmds/inspect-dump-super.c
+++ b/cmds/inspect-dump-super.c
@@ -35,11 +35,13 @@
#include "crypto/crc32c.h"
#include "common/help.h"
-static int check_csum_sblock(void *sb, int csum_size, u16 csum_type)
+static int check_csum_sblock(void *sb, int csum_size, u16 csum_type,
+ char *auth_key)
{
+ struct btrfs_fs_info dummy_fs_info = { .auth_key = auth_key };
u8 result[BTRFS_CSUM_SIZE];
- btrfs_csum_data(NULL, csum_type, (u8 *)sb + BTRFS_CSUM_SIZE,
+ btrfs_csum_data(&dummy_fs_info, csum_type, (u8 *)sb + BTRFS_CSUM_SIZE,
result, BTRFS_SUPER_INFO_SIZE - BTRFS_CSUM_SIZE);
return !memcmp(sb, result, csum_size);
@@ -326,7 +328,8 @@ static bool is_valid_csum_type(u16 csum_type)
}
}
-static void dump_superblock(struct btrfs_super_block *sb, int full)
+static void dump_superblock(struct btrfs_super_block *sb, int full,
+ char *auth_key)
{
int i;
char *s, buf[BTRFS_UUID_UNPARSED_SIZE];
@@ -353,11 +356,11 @@ static void dump_superblock(struct btrfs_super_block *sb, int full)
printf("csum\t\t\t0x");
for (i = 0, p = sb->csum; i < csum_size; i++)
printf("%02x", p[i]);
- if (csum_type == BTRFS_CSUM_TYPE_HMAC_SHA256)
+ if (csum_type == BTRFS_CSUM_TYPE_HMAC_SHA256 && !auth_key)
printf(" [NO KEY FOR HMAC]");
else if (!is_valid_csum_type(csum_type))
printf(" [UNKNOWN CSUM TYPE OR SIZE]");
- else if (check_csum_sblock(sb, csum_size, csum_type))
+ else if (check_csum_sblock(sb, csum_size, csum_type, auth_key))
printf(" [match]");
else
printf(" [DON'T MATCH]");
@@ -485,7 +488,7 @@ static void dump_superblock(struct btrfs_super_block *sb, int full)
}
static int load_and_dump_sb(char *filename, int fd, u64 sb_bytenr, int full,
- int force)
+ int force, char *auth_key)
{
u8 super_block_data[BTRFS_SUPER_INFO_SIZE];
struct btrfs_super_block *sb;
@@ -510,7 +513,7 @@ static int load_and_dump_sb(char *filename, int fd, u64 sb_bytenr, int full,
error("bad magic on superblock on %s at %llu",
filename, (unsigned long long)sb_bytenr);
} else {
- dump_superblock(sb, full);
+ dump_superblock(sb, full, auth_key);
}
return 0;
}
@@ -524,6 +527,7 @@ static const char * const cmd_inspect_dump_super_usage[] = {
"-s|--super <super> specify which copy to print out (values: 0, 1, 2)",
"-F|--force attempt to dump superblocks with bad magic",
"--bytenr <offset> specify alternate superblock offset",
+ "--auth-key <key> specify authentication key for authenticated file-system",
"",
"Deprecated syntax:",
"-s <bytenr> specify alternate superblock offset, values other than 0, 1, 2",
@@ -546,16 +550,19 @@ static int cmd_inspect_dump_super(const struct cmd_struct *cmd,
int ret = 0;
u64 arg;
u64 sb_bytenr = btrfs_sb_offset(0);
+ char *auth_key = NULL;
while (1) {
int c;
- enum { GETOPT_VAL_BYTENR = 257 };
+ enum { GETOPT_VAL_BYTENR = 257, GETOPT_VAL_AUTHKEY, };
static const struct option long_options[] = {
{"all", no_argument, NULL, 'a'},
{"bytenr", required_argument, NULL, GETOPT_VAL_BYTENR },
{"full", no_argument, NULL, 'f'},
{"force", no_argument, NULL, 'F'},
{"super", required_argument, NULL, 's' },
+ {"auth-key", required_argument, NULL,
+ GETOPT_VAL_AUTHKEY },
{NULL, 0, NULL, 0}
};
@@ -602,13 +609,16 @@ static int cmd_inspect_dump_super(const struct cmd_struct *cmd,
sb_bytenr = arg;
all = 0;
break;
+ case GETOPT_VAL_AUTHKEY:
+ auth_key = strdup(optarg);
+ break;
default:
usage_unknown_option(cmd, argv);
}
}
if (check_argc_min(argc - optind, 1))
- return 1;
+ goto out;
for (i = optind; i < argc; i++) {
filename = argv[i];
@@ -625,7 +635,8 @@ static int cmd_inspect_dump_super(const struct cmd_struct *cmd,
for (idx = 0; idx < BTRFS_SUPER_MIRROR_MAX; idx++) {
sb_bytenr = btrfs_sb_offset(idx);
if (load_and_dump_sb(filename, fd,
- sb_bytenr, full, force)) {
+ sb_bytenr, full, force,
+ auth_key)) {
close(fd);
ret = 1;
goto out;
@@ -634,13 +645,15 @@ static int cmd_inspect_dump_super(const struct cmd_struct *cmd,
putchar('\n');
}
} else {
- load_and_dump_sb(filename, fd, sb_bytenr, full, force);
+ load_and_dump_sb(filename, fd, sb_bytenr, full, force,
+ auth_key);
putchar('\n');
}
close(fd);
}
out:
+ free(auth_key);
return ret;
}
DEFINE_SIMPLE_COMMAND(inspect_dump_super, "dump-super");
--
2.26.1
next prev parent reply other threads:[~2020-05-14 9:35 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-14 9:34 [PATCH v2 0/5] btrfs-progs: support creating authenticated file-systems Johannes Thumshirn
2020-05-14 9:34 ` [PATCH v2 1/5] btrfs-progs: pass in fs_info to btrfs_csum_data Johannes Thumshirn
2020-05-14 9:34 ` [PATCH v2 2/5] btrfs-progs: add auth_key argument to open_ctree_fs_info Johannes Thumshirn
2020-05-14 9:34 ` [PATCH v2 3/5] btrfs-progs: Add HMAC(SHA256) support Johannes Thumshirn
2020-06-05 8:10 ` Anand Jain
2020-05-14 9:34 ` Johannes Thumshirn [this message]
2020-05-14 9:34 ` [PATCH v2 5/5] btrfs-progs: add auth key to check Johannes Thumshirn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200514093433.6818-5-jth@kernel.org \
--to=jth@kernel.org \
--cc=dsterba@suse.cz \
--cc=johannes.thumshirn@wdc.com \
--cc=jthumshirn@suse.de \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).