]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
xfs: Check error during inode btree iteration in xfs_bulkstat()
authorJan Kara <jack@suse.cz>
Wed, 29 Oct 2014 23:34:52 +0000 (10:34 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Nov 2014 18:10:40 +0000 (10:10 -0800)
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

index ef8ea05897803dcd1518322223e317050bff6b84..7765ff743e914f48b1a2245a5ca2cc5a15ab7449 100644 (file)
@@ -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();
                }