d6a3380764
- Fix for e2fsck -fD corruption
34 lines
1.1 KiB
Diff
34 lines
1.1 KiB
Diff
E2fsprogs 1.41.10 introduced a regression (in commit b71e018) where
|
|
e2fsck -fD can corrupt non-indexed directories when are exists one or
|
|
more file names which alphabetically sort before ".". This can happen
|
|
with ext2 filesystems or for small directories (take less than a
|
|
block) which contain filenames that begin with a space or some other
|
|
punctuation mark.
|
|
|
|
Fix this by making sure we never reorder the '.' or '..' entry in the
|
|
directory, since they must be first.
|
|
|
|
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
|
---
|
|
e2fsck/rehash.c | 7 ++++++-
|
|
1 files changed, 6 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
|
|
index 780742e..ceb8543 100644
|
|
--- a/e2fsck/rehash.c
|
|
+++ b/e2fsck/rehash.c
|
|
@@ -763,7 +763,12 @@ retry_nohash:
|
|
|
|
/* Sort the list */
|
|
resort:
|
|
- qsort(fd.harray, fd.num_array, sizeof(struct hash_entry), hash_cmp);
|
|
+ if (fd.compress)
|
|
+ qsort(fd.harray+2, fd.num_array-2, sizeof(struct hash_entry),
|
|
+ hash_cmp);
|
|
+ else
|
|
+ qsort(fd.harray, fd.num_array, sizeof(struct hash_entry),
|
|
+ hash_cmp);
|
|
|
|
/*
|
|
* Look for duplicates
|