Skip to content

Commit

Permalink
Cramfs: fix abad comparison when wrap-arounds occur
Browse files Browse the repository at this point in the history
commit 672ca9d upstream.

It is possible for corrupted filesystem images to produce very large
block offsets that may wrap when a length is added, and wrongly pass
the buffer size test.

Reported-by: Anatoly Trosinenko <anatoly.trosinenko@gmail.com>
Signed-off-by: Nicolas Pitre <nico@linaro.org>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Nicolas Pitre authored and Greg Kroah-Hartman committed Nov 13, 2018
1 parent 245af7e commit aa52629
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fs/cramfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,8 @@ static void *cramfs_read(struct super_block *sb, unsigned int offset, unsigned i
continue;
blk_offset = (blocknr - buffer_blocknr[i]) << PAGE_SHIFT;
blk_offset += offset;
if (blk_offset + len > BUFFER_SIZE)
if (blk_offset > BUFFER_SIZE ||
blk_offset + len > BUFFER_SIZE)
continue;
return read_buffers[i] + blk_offset;
}
Expand Down

0 comments on commit aa52629

Please sign in to comment.