diff options
author | Tom Rini <trini@konsulko.com> | 2017-11-27 07:22:11 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-11-27 07:22:11 -0500 |
commit | 6e6cf015e7cdd7ca83a933320a81201972bd5e5e (patch) | |
tree | 997f0b96c2fdbea089ffa9ebf97f0b8fb2be8836 /fs | |
parent | 0931b6f20e19f6c412d6ad1ba8e3b50b2a70c3c0 (diff) | |
parent | 5451ca4da99f09bce7a693056865c93c1182f183 (diff) | |
download | u-boot-6e6cf015e7cdd7ca83a933320a81201972bd5e5e.tar.gz u-boot-6e6cf015e7cdd7ca83a933320a81201972bd5e5e.tar.bz2 u-boot-6e6cf015e7cdd7ca83a933320a81201972bd5e5e.zip |
Merge git://www.denx.de/git/u-boot-imx
Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/ext4_common.c | 10 | ||||
-rw-r--r-- | fs/ext4/ext4fs.c | 10 |
2 files changed, 19 insertions, 1 deletions
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index 31952f48b9..dac9545365 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -660,6 +660,11 @@ static int search_dir(struct ext2_inode *parent_inode, char *dirname) offset = 0; do { + if (offset & 3) { + printf("Badly aligned ext2_dirent\n"); + break; + } + dir = (struct ext2_dirent *)(block_buffer + offset); direntname = (char*)(dir) + sizeof(struct ext2_dirent); @@ -880,6 +885,11 @@ static int unlink_filename(char *filename, unsigned int blknr) offset = 0; do { + if (offset & 3) { + printf("Badly aligned ext2_dirent\n"); + break; + } + previous_dir = dir; dir = (struct ext2_dirent *)(block_buffer + offset); direntname = (char *)(dir) + sizeof(struct ext2_dirent); diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c index b0c7303aa4..9ee2caf2fa 100644 --- a/fs/ext4/ext4fs.c +++ b/fs/ext4/ext4fs.c @@ -64,6 +64,9 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos, char *delayed_buf = NULL; short status; + if (blocksize <= 0) + return -1; + /* Adjust len so it we can't read past the end of the file. */ if (len + pos > filesize) len = (filesize - pos); @@ -127,6 +130,7 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos, (blockend >> log2blksz); } } else { + int n; if (previous_block_number != -1) { /* spill */ status = ext4fs_devread(delayed_start, @@ -137,7 +141,11 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos, return -1; previous_block_number = -1; } - memset(buf, 0, blocksize - skipfirst); + /* Zero no more than `len' bytes. */ + n = blocksize - skipfirst; + if (n > len) + n = len; + memset(buf, 0, n); } buf += blocksize - skipfirst; } |