mtd: parsers: redboot: reject unterminated FIS names

RedBoot FIS partition names are stored in a fixed 16-byte field that is
expected to be NUL-terminated. parse_redboot_partitions() used strlen()
to size the names area and later copied the same field with strcpy(), so
a malformed table entry without a terminator could make both operations
read beyond the descriptor.

Validate each accepted FIS name with strnlen() before adding it to the
partition list.

Signed-off-by: Pengpeng Hou <[email protected]>
Signed-off-by: Miquel Raynal <[email protected]>
This commit is contained in:
Pengpeng Hou authored and Miquel Raynal committed 2026-07-03 15:48:08 +02:00
1 parent 591b5ac173
commit adfc275b31
1 file changed
+8 -1
+8 -1
View File
@@ -192,6 +192,7 @@ nogood:
for (i = 0; i < numslots; i++) {
struct fis_list *new_fl, **prev;
size_t name_len;
if (buf[i].name[0] == 0xff) {
if (buf[i].name[1] == 0xff) {
@@ -203,8 +204,14 @@ nogood:
if (!redboot_checksum(&buf[i]))
break;
name_len = strnlen(buf[i].name, sizeof(buf[i].name));
if (name_len == sizeof(buf[i].name)) {
ret = -EINVAL;
goto out;
}
new_fl = kmalloc_obj(struct fis_list);
namelen += strlen(buf[i].name) + 1;
namelen += name_len + 1;
if (!new_fl) {
ret = -ENOMEM;
goto out;