According to the LUKS specification the uuid header field is of data type "char[]", which is defined as "a string stored as null terminated sequence of 8-bit characters". So enforce this by adding a null byte as the last byte of the uuid. The LUKS2 specification defers to the LUKS1 specification in this regard.
Signed-off-by: Glenn Washburn <developm...@efficientek.com> --- grub-core/disk/luks.c | 3 +++ grub-core/disk/luks2.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c index 7f837d52c..ad72e5d1f 100644 --- a/grub-core/disk/luks.c +++ b/grub-core/disk/luks.c @@ -87,6 +87,9 @@ luks_scan (grub_disk_t disk, grub_cryptomount_args_t cargs) return NULL; } + /* According to the spec the uuid field is NULL terminated, so enforce it. */ + header.uuid[sizeof (header.uuid) - 1] = '\0'; + /* Look for LUKS magic sequence. */ if (grub_memcmp (header.magic, LUKS_MAGIC, sizeof (header.magic)) || grub_be_to_cpu16 (header.version) != 1) diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c index bf741d70f..1346c3821 100644 --- a/grub-core/disk/luks2.c +++ b/grub-core/disk/luks2.c @@ -342,6 +342,9 @@ luks2_read_header (grub_disk_t disk, grub_luks2_header_t *outhdr) header = &secondary; grub_memcpy (outhdr, header, sizeof (*header)); + /* According to the spec the uuid field is NULL terminated, so enforce it. */ + header->uuid[sizeof (header->uuid) - 1] = '\0'; + return GRUB_ERR_NONE; } -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel