1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

vmm: make sure we can handle smbios objects without variable part

An smbios object with no variable part is a special case, it's just
suffixed with two NUL btes. handle that properly.

This is inspired by a similar fix from https://github.com/systemd/systemd/pull/29726

(cherry picked from commit 44ec70489f377d1fa9f4e19aed95a7e39da7d93d)
This commit is contained in:
Lennart Poettering 2024-07-04 14:34:35 +02:00 committed by Luca Boccassi
parent c32f71aa14
commit 9a2f16e4ed

View File

@ -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;
}
}