mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-28 12:53:14 +01:00
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:
1 parent
591b5ac173
commit
adfc275b31
1 file changed
+8
-1
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user