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

Commit a88ff8fc authored by Neeraj Soni's avatar Neeraj Soni Committed by Blagovest Kolenichev
Browse files

dm: Support legacy on disk format in dm-default-key



Version 1.0.0 did not add iv_offset to dun and did not mandate
sector size. This resulted in different on disk data format
compared to what version 2.1.0 will support. To support OTA upgrades with
legacy data format, adapt the sector size and iv_offset if legacy
encryption algorithm is used.

Change-Id: I3b7a0279bcb98c3cba9dec3f572c12d618fdc816
Signed-off-by: default avatarNeeraj Soni <neersoni@codeaurora.org>
parent 9079675e
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -133,6 +133,22 @@ 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)
{
	struct dm_dev *dev;

	dev = (*dkc)->dev;

	if (!strcmp(argv[0], "AES-256-XTS")) {
		if (ti->len & (((*dkc)->sector_size >> SECTOR_SHIFT) - 1))
			(*dkc)->sector_size = SECTOR_SIZE;

		if (dev->bdev->bd_part)
			(*dkc)->iv_offset += dev->bdev->bd_part->start_sect;
	}
}

/*
 * Construct a default-key mapping:
 * <cipher> <key> <iv_offset> <dev_path> <start>
@@ -223,6 +239,9 @@ static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv)
		if (err)
			goto bad;
	}

	default_key_adjust_sector_size_and_iv(argv, ti, &dkc);

	dkc->sector_bits = ilog2(dkc->sector_size);
	if (ti->len & ((dkc->sector_size >> SECTOR_SHIFT) - 1)) {
		ti->error = "Device size is not a multiple of sector_size";