Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ebbaa97 authored by Neeraj Soni's avatar Neeraj Soni
Browse files

dm: default-key: Adapt legacy disk format for new set of arguments



User now have option to choose between legacy and new version of
on disk data format. So arguments passed in case of legacy format
will not match with the count check in default key driver. So
adapt the legacy support for new set of arguments.

Change-Id: Ie6f9f683c048a2a1c64d46716433bcff359dc3bf
Signed-off-by: default avatarNeeraj Soni <neersoni@codeaurora.org>
parent aebb4fd3
Loading
Loading
Loading
Loading
+25 −5
Original line number Diff line number Diff line
@@ -133,9 +133,11 @@ static int default_key_ctr_optional(struct dm_target *ti,
	return 0;
}

void default_key_adjust_sector_size_and_iv(char **argv, struct dm_target *ti,
					   struct default_key_c **dkc, u8 *raw,
					   u32 size)
static void default_key_adjust_sector_size_and_iv(char **argv,
						  struct dm_target *ti,
						  struct default_key_c **dkc,
						  u8 *raw, u32 size,
						  bool is_legacy)
{
	struct dm_dev *dev;
	int i;
@@ -146,7 +148,7 @@ void default_key_adjust_sector_size_and_iv(char **argv, struct dm_target *ti,

	dev = (*dkc)->dev;

	if (!strcmp(argv[0], "AES-256-XTS")) {
	if (is_legacy) {
		memcpy(key_new.bytes, raw, size);

		for (i = 0; i < ARRAY_SIZE(key_new.words); i++)
@@ -179,6 +181,24 @@ static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv)
	unsigned long long tmpll;
	char dummy;
	int err;
	char *_argv[10];
	bool is_legacy = false;

	if (argc >= 4 && !strcmp(argv[0], "AES-256-XTS")) {
		argc = 0;
		_argv[argc++] = "aes-xts-plain64";
		_argv[argc++] = argv[1];
		_argv[argc++] = "0";
		_argv[argc++] = argv[2];
		_argv[argc++] = argv[3];
		_argv[argc++] = "3";
		_argv[argc++] = "allow_discards";
		_argv[argc++] = "sector_size:4096";
		_argv[argc++] = "iv_large_sectors";
		_argv[argc] = NULL;
		argv = _argv;
		is_legacy = true;
	}

	if (argc < 5) {
		ti->error = "Not enough arguments";
@@ -254,7 +274,7 @@ static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv)
	}

	default_key_adjust_sector_size_and_iv(argv, ti, &dkc, raw_key,
					      raw_key_size);
					      raw_key_size, is_legacy);

	dkc->sector_bits = ilog2(dkc->sector_size);
	if (ti->len & ((dkc->sector_size >> SECTOR_SHIFT) - 1)) {