| From 7a19dee116c8fae7ba7a778043c245194289f5a2 Mon Sep 17 00:00:00 2001 |
| From: Jan Kara <jack@suse.cz> |
| Date: Thu, 30 Oct 2014 10:34:52 +1100 |
| Subject: xfs: Check error during inode btree iteration in xfs_bulkstat() |
| |
| From: Jan Kara <jack@suse.cz> |
| |
| commit 7a19dee116c8fae7ba7a778043c245194289f5a2 upstream. |
| |
| xfs_bulkstat() doesn't check error return from xfs_btree_increment(). In |
| case of specific fs corruption that could result in xfs_bulkstat() |
| entering an infinite loop because we would be looping over the same |
| chunk over and over again. Fix the problem by checking the return value |
| and terminating the loop properly. |
| |
| Coverity-id: 1231338 |
| Signed-off-by: Jan Kara <jack@suse.cz> |
| Reviewed-by: Jie Liu <jeff.u.liu@gmail.com> |
| Signed-off-by: Dave Chinner <david@fromorbit.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/xfs/xfs_itable.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/fs/xfs/xfs_itable.c |
| +++ b/fs/xfs/xfs_itable.c |
| @@ -474,6 +474,10 @@ xfs_bulkstat( |
| */ |
| agino = r.ir_startino + XFS_INODES_PER_CHUNK; |
| error = xfs_btree_increment(cur, 0, &tmp); |
| + if (error) { |
| + end_of_ag = 1; |
| + goto del_cursor; |
| + } |
| cond_resched(); |
| } |
| |