Checked expanded attribute does not overflow the space in use
When resizing an attribute, make sure the trailing data is moved in the correct direction.edge.strict_endians^2
parent
84478c4012
commit
68ead9b8fc
|
@ -4635,6 +4635,13 @@ int ntfs_attr_record_resize(MFT_RECORD *m, ATTR_RECORD *a, u32 new_size)
|
|||
}
|
||||
|
||||
/* Move attributes following @a to their new location. */
|
||||
if (((u8 *)m + old_size) < ((u8 *)a + attr_size)) {
|
||||
ntfs_log_error("Attribute 0x%x overflows"
|
||||
" from MFT record\n",
|
||||
(int)le32_to_cpu(a->type));
|
||||
errno = EIO;
|
||||
return (-1);
|
||||
}
|
||||
memmove((u8 *)a + new_size, (u8 *)a + attr_size,
|
||||
old_size - ((u8 *)a - (u8 *)m) - attr_size);
|
||||
|
||||
|
|
Loading…
Reference in New Issue