From: Lennart Poettering Date: Mon, 2 Jun 2025 04:43:09 +0000 (+0200) Subject: repart: make CopyBlock=auto work for verity sig partitions X-Git-Tag: v258-rc1~429^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=253acf116cefd5693b1729f98eb43685b6c9b46c;p=thirdparty%2Fsystemd.git repart: make CopyBlock=auto work for verity sig partitions Note that this doesn't care which partition set (A or B in an A/B scenario) is actually newer, it just picks the first suitable, but that's something we should look into later. For now, let's just make verity sig partitions work the same way as verity partitions. Fixes #34835 --- diff --git a/src/repart/repart.c b/src/repart/repart.c index 71d456254ea..3f8b24158b5 100644 --- a/src/repart/repart.c +++ b/src/repart/repart.c @@ -7291,23 +7291,34 @@ static int resolve_copy_blocks_auto( * partitions in the host, using the appropriate directory as key and ensuring that the partition * type matches. */ - if (type.designator == PARTITION_ROOT) - try1 = "/"; - else if (type.designator == PARTITION_USR) - try1 = "/usr/"; - else if (type.designator == PARTITION_ROOT_VERITY) + switch (type.designator) { + + case PARTITION_ROOT: + case PARTITION_ROOT_VERITY: + case PARTITION_ROOT_VERITY_SIG: try1 = "/"; - else if (type.designator == PARTITION_USR_VERITY) + break; + + case PARTITION_USR: + case PARTITION_USR_VERITY: + case PARTITION_USR_VERITY_SIG: try1 = "/usr/"; - else if (type.designator == PARTITION_ESP) { + break; + + case PARTITION_ESP: try1 = "/efi/"; try2 = "/boot/"; - } else if (type.designator == PARTITION_XBOOTLDR) + break; + + case PARTITION_XBOOTLDR: try1 = "/boot/"; - else + break; + + default: return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Partition type " SD_ID128_FORMAT_STR " not supported from automatic source block device discovery.", SD_ID128_FORMAT_VAL(type.uuid)); + } r = find_backing_devno(try1, root, &devno); if (r == -ENOENT && try2)