]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
e2fsck: don't set prev after processing '..' on an inline dir
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 10 Aug 2014 22:50:38 +0000 (18:50 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 10 Aug 2014 22:50:38 +0000 (18:50 -0400)
In an inline directory, the '..' entry is compacted down to just the
inode number; there is no full '..' entry.  Therefore, it makes no
sense to assign 'prev' to the fake dotdot entry we put on the stack,
as this could confuse a salvage_directory call on a corrupted next
entry into modifying stack contents (the fake dotdot entry).

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e2fsck/pass2.c

index ed2c4d790d63cd635c554f064b97a0786a780455..fb98af5d33dbcc13d25405669fac0a0ad778d965 100644 (file)
@@ -1330,8 +1330,19 @@ skip_checksum:
                if (!inline_data_size || dot_state > 1) {
                        offset += rec_len;
                } else {
-                       if (dot_state == 1)
+                       if (dot_state == 1) {
                                offset = 4;
+                               /*
+                                * If we get here, we're checking an inline
+                                * directory and we've just checked a (fake)
+                                * dotdot entry that we created on the stack.
+                                * Therefore set 'prev' to NULL so that if we
+                                * call salvage_directory on the next entry,
+                                * it won't try to absorb the next entry into
+                                * the on-stack dotdot entry.
+                                */
+                               prev = NULL;
+                       }
                }
                dot_state++;
        } while (is_last_entry(fs, inline_data_size, offset, de_csum_size));