summaryrefslogtreecommitdiffstats
path: root/src/boot/efi/vmm.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-16 18:18:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-16 18:18:34 +0000
commit67497cedb2f732b3445ecdc0d09b881f9c69f852 (patch)
treeb7197679acca419c7ddc0300873e19141d5fae3e /src/boot/efi/vmm.c
parentAdding debian version 256.1-2. (diff)
downloadsystemd-67497cedb2f732b3445ecdc0d09b881f9c69f852.tar.xz
systemd-67497cedb2f732b3445ecdc0d09b881f9c69f852.zip
Merging upstream version 256.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boot/efi/vmm.c')
-rw-r--r--src/boot/efi/vmm.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/boot/efi/vmm.c b/src/boot/efi/vmm.c
index 60e216d..bfc7acc 100644
--- a/src/boot/efi/vmm.c
+++ b/src/boot/efi/vmm.c
@@ -241,13 +241,21 @@ static const SmbiosHeader *get_smbios_table(uint8_t type, uint64_t *ret_size_lef
size -= header->length;
p += header->length;
- /* Skip over string table. */
+ /* Special case: if there are no strings appended, we'll see two NUL bytes, skip over them */
+ if (size >= 2 && p[0] == 0 && p[1] == 0) {
+ size -= 2;
+ p += 2;
+ continue;
+ }
+
+ /* Skip over a populated string table. */
+ bool first = true;
for (;;) {
const uint8_t *e = memchr(p, 0, size);
if (!e)
return NULL;
- if (e == p) {/* Double NUL byte means we've reached the end of the string table. */
+ if (!first && e == p) {/* Double NUL byte means we've reached the end of the string table. */
p++;
size--;
break;
@@ -255,6 +263,7 @@ static const SmbiosHeader *get_smbios_table(uint8_t type, uint64_t *ret_size_lef
size -= e + 1 - p;
p = e + 1;
+ first = false;
}
}