提交 0d0ab120 编写于 作者: D Dan Carpenter 提交者: 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: NDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: NBen Myers <bpm@sgi.com>
Signed-off-by: NBen Myers <bpm@sgi.com>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册