diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-11-25 17:36:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-25 17:36:57 +0100 |
commit | 7ff048a718afd7670c84c6dbd94c0eda0f8269c7 (patch) | |
tree | 922862e1594049fa98a331269288f58de4a55745 /src/shared/dissect-image.h | |
parent | 9df247da2849e3154fc343d7ecd439ef4b8f0fa8 (diff) | |
parent | 1b6f9b9880348be939d354e8506a2424e88776c8 (diff) | |
download | systemd-7ff048a718afd7670c84c6dbd94c0eda0f8269c7.tar.gz |
Merge pull request #21487 from DaanDeMeyer/dissect-image-other-arch
Allow dissect_image() to dissect images from architectures other than the native one
Diffstat (limited to 'src/shared/dissect-image.h')
-rw-r--r-- | src/shared/dissect-image.h | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h index 48a9e0b4f9..032126627c 100644 --- a/src/shared/dissect-image.h +++ b/src/shared/dissect-image.h @@ -5,6 +5,7 @@ #include "sd-id128.h" +#include "architecture.h" #include "list.h" #include "loop-util.h" #include "macro.h" @@ -35,8 +36,10 @@ struct DissectedPartition { typedef enum PartitionDesignator { PARTITION_ROOT, PARTITION_ROOT_SECONDARY, /* Secondary architecture */ + PARTITION_ROOT_OTHER, PARTITION_USR, PARTITION_USR_SECONDARY, + PARTITION_USR_OTHER, PARTITION_HOME, PARTITION_SRV, PARTITION_ESP, @@ -44,12 +47,16 @@ typedef enum PartitionDesignator { PARTITION_SWAP, PARTITION_ROOT_VERITY, /* verity data for the PARTITION_ROOT partition */ PARTITION_ROOT_SECONDARY_VERITY, /* verity data for the PARTITION_ROOT_SECONDARY partition */ + PARTITION_ROOT_OTHER_VERITY, PARTITION_USR_VERITY, PARTITION_USR_SECONDARY_VERITY, + PARTITION_USR_OTHER_VERITY, PARTITION_ROOT_VERITY_SIG, /* PKCS#7 signature for root hash for the PARTITION_ROOT partition */ PARTITION_ROOT_SECONDARY_VERITY_SIG, /* ditto for the PARTITION_ROOT_SECONDARY partition */ + PARTITION_ROOT_OTHER_VERITY_SIG, PARTITION_USR_VERITY_SIG, PARTITION_USR_SECONDARY_VERITY_SIG, + PARTITION_USR_OTHER_VERITY_SIG, PARTITION_TMP, PARTITION_VAR, _PARTITION_DESIGNATOR_MAX, @@ -65,16 +72,22 @@ static inline bool PARTITION_DESIGNATOR_VERSIONED(PartitionDesignator d) { return IN_SET(d, PARTITION_ROOT, PARTITION_ROOT_SECONDARY, + PARTITION_ROOT_OTHER, PARTITION_USR, PARTITION_USR_SECONDARY, + PARTITION_USR_OTHER, PARTITION_ROOT_VERITY, PARTITION_ROOT_SECONDARY_VERITY, + PARTITION_ROOT_OTHER_VERITY, PARTITION_USR_VERITY, PARTITION_USR_SECONDARY_VERITY, + PARTITION_USR_OTHER_VERITY, PARTITION_ROOT_VERITY_SIG, PARTITION_ROOT_SECONDARY_VERITY_SIG, + PARTITION_ROOT_OTHER_VERITY_SIG, PARTITION_USR_VERITY_SIG, - PARTITION_USR_SECONDARY_VERITY_SIG); + PARTITION_USR_SECONDARY_VERITY_SIG, + PARTITION_USR_OTHER_VERITY_SIG); } static inline PartitionDesignator PARTITION_VERITY_OF(PartitionDesignator p) { @@ -86,12 +99,18 @@ static inline PartitionDesignator PARTITION_VERITY_OF(PartitionDesignator p) { case PARTITION_ROOT_SECONDARY: return PARTITION_ROOT_SECONDARY_VERITY; + case PARTITION_ROOT_OTHER: + return PARTITION_ROOT_OTHER_VERITY; + case PARTITION_USR: return PARTITION_USR_VERITY; case PARTITION_USR_SECONDARY: return PARTITION_USR_SECONDARY_VERITY; + case PARTITION_USR_OTHER: + return PARTITION_USR_OTHER_VERITY; + default: return _PARTITION_DESIGNATOR_INVALID; } @@ -106,17 +125,55 @@ static inline PartitionDesignator PARTITION_VERITY_SIG_OF(PartitionDesignator p) case PARTITION_ROOT_SECONDARY: return PARTITION_ROOT_SECONDARY_VERITY_SIG; + case PARTITION_ROOT_OTHER: + return PARTITION_ROOT_OTHER_VERITY_SIG; + case PARTITION_USR: return PARTITION_USR_VERITY_SIG; case PARTITION_USR_SECONDARY: return PARTITION_USR_SECONDARY_VERITY_SIG; + case PARTITION_USR_OTHER: + return PARTITION_USR_OTHER_VERITY_SIG; + default: return _PARTITION_DESIGNATOR_INVALID; } } +static inline PartitionDesignator PARTITION_ROOT_OF_ARCH(Architecture arch) { + switch (arch) { + + case native_architecture(): + return PARTITION_ROOT; + +#ifdef ARCHITECTURE_SECONDARY + case ARCHITECTURE_SECONDARY: + return PARTITION_ROOT_SECONDARY; +#endif + + default: + return PARTITION_ROOT_OTHER; + } +} + +static inline PartitionDesignator PARTITION_USR_OF_ARCH(Architecture arch) { + switch (arch) { + + case native_architecture(): + return PARTITION_USR; + +#ifdef ARCHITECTURE_SECONDARY + case ARCHITECTURE_SECONDARY: + return PARTITION_USR_SECONDARY; +#endif + + default: + return PARTITION_USR_OTHER; + } +} + typedef enum DissectImageFlags { DISSECT_IMAGE_DEVICE_READ_ONLY = 1 << 0, /* Make device read-only */ DISSECT_IMAGE_DISCARD_ON_LOOP = 1 << 1, /* Turn on "discard" if on a loop device and file system supports it */ |