Skip to content

Commit

Permalink
xfs: check for underflow in xfs_iformat_fork()
Browse files Browse the repository at this point in the history
The "di_size" variable comes from the disk and it's a signed 64 bit.
We check the upper limit but we should check for negative numbers as
well.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
  • Loading branch information
Dan Carpenter authored and Ben Myers committed Aug 26, 2013
1 parent 98f7462 commit 0d0ab12
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fs/xfs/xfs_inode_fork.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ xfs_iformat_fork(
}

di_size = be64_to_cpu(dip->di_size);
if (unlikely(di_size > XFS_DFORK_DSIZE(dip, ip->i_mount))) {
if (unlikely(di_size < 0 ||
di_size > XFS_DFORK_DSIZE(dip, ip->i_mount))) {
xfs_warn(ip->i_mount,
"corrupt inode %Lu (bad size %Ld for local inode).",
(unsigned long long) ip->i_ino,
Expand Down

0 comments on commit 0d0ab12

Please sign in to comment.