Commit 0d0ab120 authored by Dan Carpenter's avatar Dan Carpenter Committed by Ben Myers

xfs: check for underflow in xfs_iformat_fork()

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: default avatarDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: default avatarBen Myers <bpm@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent 98f7462c
...@@ -167,7 +167,8 @@ xfs_iformat_fork( ...@@ -167,7 +167,8 @@ xfs_iformat_fork(
} }
di_size = be64_to_cpu(dip->di_size); 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, xfs_warn(ip->i_mount,
"corrupt inode %Lu (bad size %Ld for local inode).", "corrupt inode %Lu (bad size %Ld for local inode).",
(unsigned long long) ip->i_ino, (unsigned long long) ip->i_ino,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment