Commit 0ca0485
fs/ntfs3: validate rec->used in journal-replay file record check
check_file_record() validates rec->total against the record size but
never validates rec->used. The do_action() journal-replay handlers read
rec->used from disk and use it to compute memmove lengths:
DeleteAttribute: memmove(attr, ..., used - asize - roff)
CreateAttribute: memmove(..., attr, used - roff)
change_attr_size: memmove(..., used - PtrOffset(rec, next))
When rec->used is smaller than the offset of a validated attribute, or
larger than the record size, these subtractions can underflow allowing
us to copy huge amounts of memory in to a 4kb buffer, generally
considered a bad idea overall.
This requires a corrupted filesystem, which isn't a threat model the
kernel really needs to worry about, but checking for such an obvious
out-of-bounds value is good to keep things robust, especially on journal
replay
Fix this up by bounding rec->used correctly.
This is much like commit b2bc7c4 ("fs/ntfs3: Fix slab-out-of-bounds
read in DeleteIndexEntryRoot") which checked different values in this
same switch statement.
Cc: Konstantin Komarov <[email protected]>
Fixes: b46acd6 ("fs/ntfs3: Add NTFS journal")
Cc: stable <[email protected]>
Assisted-by: gregkh_clanker_t1000
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Konstantin Komarov <[email protected]>1 parent a6cd43f commit 0ca0485
1 file changed
Lines changed: 11 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2791 | 2791 | | |
2792 | 2792 | | |
2793 | 2793 | | |
| 2794 | + | |
2794 | 2795 | | |
2795 | 2796 | | |
2796 | 2797 | | |
2797 | 2798 | | |
2798 | 2799 | | |
2799 | 2800 | | |
2800 | | - | |
| 2801 | + | |
2801 | 2802 | | |
2802 | 2803 | | |
2803 | 2804 | | |
| |||
2809 | 2810 | | |
2810 | 2811 | | |
2811 | 2812 | | |
| 2813 | + | |
| 2814 | + | |
| 2815 | + | |
| 2816 | + | |
| 2817 | + | |
| 2818 | + | |
| 2819 | + | |
| 2820 | + | |
| 2821 | + | |
2812 | 2822 | | |
2813 | 2823 | | |
2814 | 2824 | | |
| |||
0 commit comments