]> git.baikalelectronics.ru Git - kernel.git/commit
xfs: fix directory hash ordering bug
authorMark Tinguely <tinguely@sgi.com>
Thu, 3 Apr 2014 20:10:49 +0000 (07:10 +1100)
committerDave Chinner <david@fromorbit.com>
Thu, 3 Apr 2014 20:10:49 +0000 (07:10 +1100)
commit53269e5b61d99f4356d64d38600c768e5fecb2db
tree98347e40f7e81bf91c3b217065757066dbb6bd59
parentba72a3583cecc34f5375d59a2bc4df771cde5020
xfs: fix directory hash ordering bug

Commit 05d21724 ("xfs: add CRCs to dir2/da node blocks") introduced
in 3.10 incorrectly converted the btree hash index array pointer in
xfs_da3_fixhashpath(). It resulted in the the current hash always
being compared against the first entry in the btree rather than the
current block index into the btree block's hash entry array. As a
result, it was comparing the wrong hashes, and so could misorder the
entries in the btree.

For most cases, this doesn't cause any problems as it requires hash
collisions to expose the ordering problem. However, when there are
hash collisions within a directory there is a very good probability
that the entries will be ordered incorrectly and that actually
matters when duplicate hashes are placed into or removed from the
btree block hash entry array.

This bug results in an on-disk directory corruption and that results
in directory verifier functions throwing corruption warnings into
the logs. While no data or directory entries are lost, access to
them may be compromised, and attempts to remove entries from a
directory that has suffered from this corruption may result in a
filesystem shutdown.  xfs_repair will fix the directory hash
ordering without data loss occuring.

[dchinner: wrote useful a commit message]

cc: <stable@vger.kernel.org>
Reported-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Mark Tinguely <tinguely@sgi.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_da_btree.c