summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2023-01-30 01:15:55 -0500
committerTheodore Ts'o <tytso@mit.edu>2023-01-30 01:15:55 -0500
commit5adb971551656597c568bac6b6c06e1506f89046 (patch)
tree5cfa6d5d3189e6de8ad583c5f141b9ecf7c43609
parent9d25847b3ce3df3adaa20a466af9fb7af287a567 (diff)
parentb0101535a35c07975227128875204fab07e72996 (diff)
downloade2fsprogs-5adb971551656597c568bac6b6c06e1506f89046.tar.gz
Merge branch 'maint' into next
-rw-r--r--.github/workflows/ci.yml42
-rw-r--r--debugfs/xattrs.c4
-rw-r--r--e2fsck/jfs_user.h10
-rw-r--r--e2fsck/pass1.c15
-rw-r--r--lib/ext2fs/Android.bp1
-rw-r--r--lib/ext2fs/ext2fs.h6
-rw-r--r--lib/ext2fs/ext_attr.c78
-rw-r--r--lib/ext2fs/ismounted.c2
-rw-r--r--lib/uuid/Android.bp2
-rw-r--r--lib/uuid/gen_uuid.c5
-rw-r--r--lib/uuid/tst_uuid.c6
-rw-r--r--lib/uuid/uuid_time.c6
-rw-r--r--tests/d_corrupt_journal_nr_users/name2
-rw-r--r--tests/f_bad_disconnected_inode/name2
-rw-r--r--tests/f_bad_fname/name2
-rw-r--r--tests/f_badcluster/name1
-rw-r--r--tests/f_badjourblks/name2
-rw-r--r--tests/f_crashdisk/name2
-rw-r--r--tests/f_dup4/name1
-rw-r--r--tests/f_ea_signed_hash/expect.17
-rw-r--r--tests/f_ea_signed_hash/image.gzbin0 -> 1128 bytes
-rw-r--r--tests/f_ea_signed_hash/script2
-rw-r--r--tests/f_ea_unsigned_hash/expect.17
-rw-r--r--tests/f_ea_unsigned_hash/image.gzbin0 -> 1321 bytes
-rw-r--r--tests/f_ea_unsigned_hash/script2
-rw-r--r--tests/f_emptydir/name1
-rw-r--r--tests/f_extra_journal/name2
-rw-r--r--tests/f_h_normal/name2
-rw-r--r--tests/f_h_unsigned/name2
-rw-r--r--tests/f_holedir2/name1
-rw-r--r--tests/f_holedir3/name1
-rw-r--r--tests/f_miss_journal/name2
-rw-r--r--tests/f_recnect_bad/name2
-rw-r--r--tests/f_selinux/name2
-rw-r--r--tests/f_special_ea/name2
-rw-r--r--tests/f_uninit_last_uninit/name1
-rw-r--r--tests/f_unused_itable/name2
-rw-r--r--tests/r_resize_inode/name1
38 files changed, 149 insertions, 79 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 29482178..51b27c88 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,9 +8,9 @@ jobs:
name: Build and test with gcc
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- run: ./configure CC=gcc CFLAGS="$DEF_CFLAGS"
- - run: make -j8 check V=1 CFLAGS="$DEF_CFLAGS -Werror"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror"
- run: make -j8 install V=1 DESTDIR=$PWD/installdir
- run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
@@ -18,13 +18,13 @@ jobs:
name: Build and test with clang
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang
- run: ./configure CC=clang CFLAGS="$DEF_CFLAGS"
- - run: make -j8 check V=1 CFLAGS="$DEF_CFLAGS -Werror"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror"
- run: make -j8 install V=1 DESTDIR=$PWD/installdir
- run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
@@ -32,13 +32,13 @@ jobs:
name: Build and test with gcc -m32
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y gcc-multilib
- run: ./configure CC=gcc CFLAGS="$DEF_CFLAGS -m32" LDFLAGS="-m32"
- - run: make -j8 check V=1 CFLAGS="$DEF_CFLAGS -m32 -Werror"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror"
- run: make -j8 install V=1 DESTDIR=$PWD/installdir
- run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
@@ -46,37 +46,37 @@ jobs:
name: Build and test with ASAN enabled
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang
- run: echo "ASAN_CFLAGS=$DEF_CFLAGS -fsanitize=address -fno-sanitize-recover=address" >> $GITHUB_ENV
- run: ./configure CC=clang CFLAGS="$ASAN_CFLAGS" LDFLAGS="$ASAN_CFLAGS"
- - run: make -j8 check V=1 CFLAGS="$ASAN_CFLAGS -Werror"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror"
ubsan-build-and-test:
name: Build and test with UBSAN enabled
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang
- run: echo "UBSAN_CFLAGS=$DEF_CFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined" >> $GITHUB_ENV
- run: ./configure CC=clang CFLAGS="$UBSAN_CFLAGS" LDFLAGS="$UBSAN_CFLAGS"
- - run: make -j8 check V=1 CFLAGS="$UBSAN_CFLAGS -Werror"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror"
macos-build-and-test:
name: Build and test on macOS
runs-on: macos-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- run: ./configure CFLAGS="$DEF_CFLAGS"
# -Wno-error=deprecated-declarations is needed to suppress known warnings
# due to e2fsprogs' use of sbrk(0) and daemon().
- - run: make -j8 check V=1 CFLAGS="$DEF_CFLAGS -Werror -Wno-error=deprecated-declarations"
+ - run: make -j8 check V=1 CFLAGS_WARN="-Werror -Wno-error=deprecated-declarations"
- run: make -j8 install DESTDIR=$PWD/installdir
- run: make -j8 uninstall DESTDIR=$PWD/installdir
@@ -92,7 +92,7 @@ jobs:
run:
shell: msys2 {0}
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
@@ -104,13 +104,13 @@ jobs:
# dependencies: all libraries except libss. The build system doesn't want
# to build just those parts, though, so do it one step at a time...
- run: ./configure CFLAGS="$DEF_CFLAGS"
- - run: make -j8 subs V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/et/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/uuid/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/blkid/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/ext2fs/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/support/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C lib/e2p/ all V=1 CFLAGS="$DEF_CFLAGS -Werror"
- - run: make -j8 -C misc/ mke2fs V=1 CFLAGS="$DEF_CFLAGS -Werror"
+ - run: make -j8 subs V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/et/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/uuid/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/blkid/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/ext2fs/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/support/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C lib/e2p/ all V=1 CFLAGS_WARN="-Werror"
+ - run: make -j8 -C misc/ mke2fs V=1 CFLAGS_WARN="-Werror"
- run: touch image.ext4
- run: misc/mke2fs.exe -T ext4 image.ext4 128M
diff --git a/debugfs/xattrs.c b/debugfs/xattrs.c
index bd114503..cd042bc8 100644
--- a/debugfs/xattrs.c
+++ b/debugfs/xattrs.c
@@ -430,9 +430,9 @@ static void dump_xattr_raw_entries(FILE *f, unsigned char *buf,
#else
ent = *((struct ext2_ext_attr_entry *) (buf + off));
#endif
- fprintf(f, "offset = %d (%04o), name_len = %u, "
+ fprintf(f, "offset = %d (%04o), hash = %u, name_len = %u, "
"name_index = %u\n",
- off, off, ent.e_name_len, ent.e_name_index);
+ off, off, ent.e_hash, ent.e_name_len, ent.e_name_index);
vstart = value_start + ent.e_value_offs;
fprintf(f, "value_offset = %d (%04o), value_inum = %u, "
"value_size = %u\n", ent.e_value_offs,
diff --git a/e2fsck/jfs_user.h b/e2fsck/jfs_user.h
index 1167c80d..5928a8a8 100644
--- a/e2fsck/jfs_user.h
+++ b/e2fsck/jfs_user.h
@@ -179,7 +179,17 @@ _INLINE_ void *kmalloc(size_t size, gfp_t flags EXT2FS_ATTR((unused)))
_INLINE_ void kfree(const void *objp)
{
+#ifdef HAVE_INTPTR_T
+ /*
+ * Work around a botch in the C standard, which triggers
+ * compiler warnings. For better or for worse, the kernel
+ * uses const void * for kfree, while the C standard mandates
+ * the use of void *. See: https://yarchive.net/comp/const.html
+ */
+ free((void *)(intptr_t)objp);
+#else
free((void *)objp);
+#endif
}
/* generic hashing taken from the Linux kernel */
diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
index 591acad5..a341c72a 100644
--- a/e2fsck/pass1.c
+++ b/e2fsck/pass1.c
@@ -331,7 +331,7 @@ static problem_t check_large_ea_inode(e2fsck_t ctx,
blk64_t *quota_blocks)
{
struct ext2_inode inode;
- __u32 hash;
+ __u32 hash, signed_hash;
errcode_t retval;
/* Check if inode is within valid range */
@@ -343,7 +343,8 @@ static problem_t check_large_ea_inode(e2fsck_t ctx,
e2fsck_read_inode(ctx, entry->e_value_inum, &inode, "pass1");
- retval = ext2fs_ext_attr_hash_entry2(ctx->fs, entry, NULL, &hash);
+ retval = ext2fs_ext_attr_hash_entry3(ctx->fs, entry, NULL, &hash,
+ &signed_hash);
if (retval) {
com_err("check_large_ea_inode", retval,
_("while hashing entry with e_value_inum = %u"),
@@ -351,7 +352,7 @@ static problem_t check_large_ea_inode(e2fsck_t ctx,
fatal_error(ctx, 0);
}
- if (hash == entry->e_hash) {
+ if ((hash == entry->e_hash) || (signed_hash == entry->e_hash)) {
*quota_blocks = size_to_quota_blocks(ctx->fs,
entry->e_value_size);
} else {
@@ -495,7 +496,10 @@ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx,
}
hash = ext2fs_ext_attr_hash_entry(entry,
- start + entry->e_value_offs);
+ start + entry->e_value_offs);
+ if (entry->e_hash != 0 && entry->e_hash != hash)
+ hash = ext2fs_ext_attr_hash_entry_signed(entry,
+ start + entry->e_value_offs);
/* e_hash may be 0 in older inode's ea */
if (entry->e_hash != 0 && entry->e_hash != hash) {
@@ -2602,6 +2606,9 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
hash = ext2fs_ext_attr_hash_entry(entry, block_buf +
entry->e_value_offs);
+ if (entry->e_hash != hash)
+ hash = ext2fs_ext_attr_hash_entry_signed(entry,
+ block_buf + entry->e_value_offs);
if (entry->e_hash != hash) {
pctx->num = entry->e_hash;
diff --git a/lib/ext2fs/Android.bp b/lib/ext2fs/Android.bp
index eb4482d7..f5cbeec9 100644
--- a/lib/ext2fs/Android.bp
+++ b/lib/ext2fs/Android.bp
@@ -121,7 +121,6 @@ cc_library {
enabled: true,
include_dirs: ["external/e2fsprogs/include/mingw"],
cflags: [
- "-Wno-error=cpp",
"-Wno-format",
"-Wno-unused-variable",
"-Wno-error=typedef-redefinition",
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 80206870..72c60d2b 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -1266,9 +1266,15 @@ extern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir);
/* ext_attr.c */
extern __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry,
void *data);
+extern __u32 ext2fs_ext_attr_hash_entry_signed(struct ext2_ext_attr_entry *entry,
+ void *data);
extern errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
struct ext2_ext_attr_entry *entry,
void *data, __u32 *hash);
+extern errcode_t ext2fs_ext_attr_hash_entry3(ext2_filsys fs,
+ struct ext2_ext_attr_entry *entry,
+ void *data, __u32 *hash,
+ __u32 *signed_hash);
extern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf);
extern errcode_t ext2fs_read_ext_attr2(ext2_filsys fs, blk64_t block,
void *buf);
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index 359c8e3c..34940463 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -48,7 +48,8 @@ static errcode_t read_ea_inode_hash(ext2_filsys fs, ext2_ino_t ino, __u32 *hash)
__u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry, void *data)
{
__u32 hash = 0;
- char *name = ((char *) entry) + sizeof(struct ext2_ext_attr_entry);
+ unsigned char *name = (((unsigned char *) entry) +
+ sizeof(struct ext2_ext_attr_entry));
int n;
for (n = 0; n < entry->e_name_len; n++) {
@@ -71,18 +72,51 @@ __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry, void *data)
return hash;
}
+__u32 ext2fs_ext_attr_hash_entry_signed(struct ext2_ext_attr_entry *entry,
+ void *data)
+{
+ __u32 hash = 0;
+ signed char *name = (((signed char *) entry) +
+ sizeof(struct ext2_ext_attr_entry));
+ int n;
+
+ for (n = 0; n < entry->e_name_len; n++) {
+ hash = (hash << NAME_HASH_SHIFT) ^
+ (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
+ *name++;
+ }
+
+ /* The hash needs to be calculated on the data in little-endian. */
+ if (entry->e_value_inum == 0 && entry->e_value_size != 0) {
+ __u32 *value = (__u32 *)data;
+ for (n = (entry->e_value_size + EXT2_EXT_ATTR_ROUND) >>
+ EXT2_EXT_ATTR_PAD_BITS; n; n--) {
+ hash = (hash << VALUE_HASH_SHIFT) ^
+ (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
+ ext2fs_le32_to_cpu(*value++);
+ }
+ }
+
+ return hash;
+}
+
+
/*
- * ext2fs_ext_attr_hash_entry2()
+ * ext2fs_ext_attr_hash_entry3()
*
- * Compute the hash of an extended attribute.
- * This version of the function supports hashing entries that reference
- * external inodes (ea_inode feature).
+ * Compute the hash of an extended attribute. This version of the
+ * function supports hashing entries that reference external inodes
+ * (ea_inode feature) as well as calculating the old legacy signed
+ * hash variant.
*/
-errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
+errcode_t ext2fs_ext_attr_hash_entry3(ext2_filsys fs,
struct ext2_ext_attr_entry *entry,
- void *data, __u32 *hash)
+ void *data, __u32 *hash,
+ __u32 *signed_hash)
{
*hash = ext2fs_ext_attr_hash_entry(entry, data);
+ if (signed_hash)
+ *signed_hash = ext2fs_ext_attr_hash_entry_signed(entry, data);
if (entry->e_value_inum) {
__u32 ea_inode_hash;
@@ -96,10 +130,29 @@ errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
*hash = (*hash << VALUE_HASH_SHIFT) ^
(*hash >> (8*sizeof(*hash) - VALUE_HASH_SHIFT)) ^
ea_inode_hash;
+ if (signed_hash)
+ *signed_hash = (*signed_hash << VALUE_HASH_SHIFT) ^
+ (*signed_hash >> (8*sizeof(*hash) -
+ VALUE_HASH_SHIFT)) ^
+ ea_inode_hash;
}
return 0;
}
+/*
+ * ext2fs_ext_attr_hash_entry2()
+ *
+ * Compute the hash of an extended attribute.
+ * This version of the function supports hashing entries that reference
+ * external inodes (ea_inode feature).
+ */
+errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
+ struct ext2_ext_attr_entry *entry,
+ void *data, __u32 *hash)
+{
+ return ext2fs_ext_attr_hash_entry3(fs, entry, data, hash, NULL);
+}
+
#undef NAME_HASH_SHIFT
#undef VALUE_HASH_SHIFT
@@ -940,15 +993,18 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
/* e_hash may be 0 in older inode's ea */
if (entry->e_hash != 0) {
- __u32 hash;
+ __u32 hash, signed_hash;
+
void *data = (entry->e_value_inum != 0) ?
0 : value_start + entry->e_value_offs;
- err = ext2fs_ext_attr_hash_entry2(handle->fs, entry,
- data, &hash);
+ err = ext2fs_ext_attr_hash_entry3(handle->fs, entry,
+ data, &hash,
+ &signed_hash);
if (err)
return err;
- if (entry->e_hash != hash) {
+ if ((entry->e_hash != hash) &&
+ (entry->e_hash != signed_hash)) {
struct ext2_inode child;
/* Check whether this is an old Lustre-style
diff --git a/lib/ext2fs/ismounted.c b/lib/ext2fs/ismounted.c
index 22bc8352..a7db1a5c 100644
--- a/lib/ext2fs/ismounted.c
+++ b/lib/ext2fs/ismounted.c
@@ -414,7 +414,7 @@ errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
#ifdef HAVE_GETMNTINFO
retval = check_getmntinfo(device, mount_flags, mtpt, mtlen);
#else
-#ifdef __GNUC__
+#if defined(__GNUC__) && !defined(_WIN32)
#warning "Can't use getmntent or getmntinfo to check for mounted filesystems!"
#endif
*mount_flags = 0;
diff --git a/lib/uuid/Android.bp b/lib/uuid/Android.bp
index 67968dba..daf30bb9 100644
--- a/lib/uuid/Android.bp
+++ b/lib/uuid/Android.bp
@@ -45,8 +45,6 @@ cc_library {
],
target: {
windows: {
- // Cannot suppress the _WIN32_WINNT redefined warning.
- cflags: ["-Wno-error"],
include_dirs: [ "external/e2fsprogs/include/mingw" ],
enabled: true
},
diff --git a/lib/uuid/gen_uuid.c b/lib/uuid/gen_uuid.c
index a2225cce..2f028867 100644
--- a/lib/uuid/gen_uuid.c
+++ b/lib/uuid/gen_uuid.c
@@ -41,11 +41,6 @@
#include "config.h"
-#ifdef _WIN32
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#define UUID MYUUID
-#endif
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
diff --git a/lib/uuid/tst_uuid.c b/lib/uuid/tst_uuid.c
index 649bfbc0..c1c29015 100644
--- a/lib/uuid/tst_uuid.c
+++ b/lib/uuid/tst_uuid.c
@@ -34,12 +34,6 @@
#include "config.h"
-#ifdef _WIN32
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#define UUID MYUUID
-#endif
-
#include <stdio.h>
#include <stdlib.h>
diff --git a/lib/uuid/uuid_time.c b/lib/uuid/uuid_time.c
index af837a2c..b519d3c4 100644
--- a/lib/uuid/uuid_time.c
+++ b/lib/uuid/uuid_time.c
@@ -36,12 +36,6 @@
#include "config.h"
-#ifdef _WIN32
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#define UUID MYUUID
-#endif
-
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
diff --git a/tests/d_corrupt_journal_nr_users/name b/tests/d_corrupt_journal_nr_users/name
index 8b33a273..24be3be7 100644
--- a/tests/d_corrupt_journal_nr_users/name
+++ b/tests/d_corrupt_journal_nr_users/name
@@ -1 +1 @@
-Journal superblock corrupted, nr_users too high
+journal superblock corrupted, nr_users too high
diff --git a/tests/f_bad_disconnected_inode/name b/tests/f_bad_disconnected_inode/name
index d09edf1e..f2fa67b3 100644
--- a/tests/f_bad_disconnected_inode/name
+++ b/tests/f_bad_disconnected_inode/name
@@ -1 +1 @@
-Disconnected inode with bad fields
+disconnected inode with bad fields
diff --git a/tests/f_bad_fname/name b/tests/f_bad_fname/name
index 675165a6..29681cb8 100644
--- a/tests/f_bad_fname/name
+++ b/tests/f_bad_fname/name
@@ -1 +1 @@
-Case-insensitive directory with broken file names
+case-insensitive directory with broken file names
diff --git a/tests/f_badcluster/name b/tests/f_badcluster/name
index 266f81c9..06bad7c8 100644
--- a/tests/f_badcluster/name
+++ b/tests/f_badcluster/name
@@ -1,2 +1 @@
test alignment problems with bigalloc clusters
-
diff --git a/tests/f_badjourblks/name b/tests/f_badjourblks/name
index 103fa7f8..fc9cef99 100644
--- a/tests/f_badjourblks/name
+++ b/tests/f_badjourblks/name
@@ -1 +1 @@
-Illegal blocks in journal inode (and backup in superblock)
+illegal blocks in journal inode (and backup in superblock)
diff --git a/tests/f_crashdisk/name b/tests/f_crashdisk/name
index 5ba8a600..2b282071 100644
--- a/tests/f_crashdisk/name
+++ b/tests/f_crashdisk/name
@@ -1 +1 @@
-Superblock with illegal values
+superblock with illegal values
diff --git a/tests/f_dup4/name b/tests/f_dup4/name
index 56dbc1e7..91cc5a34 100644
--- a/tests/f_dup4/name
+++ b/tests/f_dup4/name
@@ -1,2 +1 @@
find all directory pathnames
-
diff --git a/tests/f_ea_signed_hash/expect.1 b/tests/f_ea_signed_hash/expect.1
new file mode 100644
index 00000000..5f2b47ac
--- /dev/null
+++ b/tests/f_ea_signed_hash/expect.1
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 16/24 files (0.0% non-contiguous), 29/200 blocks
+Exit status is 0
diff --git a/tests/f_ea_signed_hash/image.gz b/tests/f_ea_signed_hash/image.gz
new file mode 100644
index 00000000..dbbc97f7
--- /dev/null
+++ b/tests/f_ea_signed_hash/image.gz
Binary files differ
diff --git a/tests/f_ea_signed_hash/script b/tests/f_ea_signed_hash/script
new file mode 100644
index 00000000..8ab2b9c6
--- /dev/null
+++ b/tests/f_ea_signed_hash/script
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck
diff --git a/tests/f_ea_unsigned_hash/expect.1 b/tests/f_ea_unsigned_hash/expect.1
new file mode 100644
index 00000000..5f2b47ac
--- /dev/null
+++ b/tests/f_ea_unsigned_hash/expect.1
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 16/24 files (0.0% non-contiguous), 29/200 blocks
+Exit status is 0
diff --git a/tests/f_ea_unsigned_hash/image.gz b/tests/f_ea_unsigned_hash/image.gz
new file mode 100644
index 00000000..795cece2
--- /dev/null
+++ b/tests/f_ea_unsigned_hash/image.gz
Binary files differ
diff --git a/tests/f_ea_unsigned_hash/script b/tests/f_ea_unsigned_hash/script
new file mode 100644
index 00000000..8ab2b9c6
--- /dev/null
+++ b/tests/f_ea_unsigned_hash/script
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck
diff --git a/tests/f_emptydir/name b/tests/f_emptydir/name
index d5bc6609..3e0ab60e 100644
--- a/tests/f_emptydir/name
+++ b/tests/f_emptydir/name
@@ -1,2 +1 @@
always iterate dir block 0 or e2fsck goes into infinite loop
-
diff --git a/tests/f_extra_journal/name b/tests/f_extra_journal/name
index c5540e27..7382f20a 100644
--- a/tests/f_extra_journal/name
+++ b/tests/f_extra_journal/name
@@ -1 +1 @@
-Valid journal inode, but has_journal feature not present
+valid journal inode, but has_journal feature not present
diff --git a/tests/f_h_normal/name b/tests/f_h_normal/name
index 5190f353..7f0cdb2c 100644
--- a/tests/f_h_normal/name
+++ b/tests/f_h_normal/name
@@ -1 +1 @@
-Normal (signed) HTREE directory
+normal (signed) HTREE directory
diff --git a/tests/f_h_unsigned/name b/tests/f_h_unsigned/name
index 16069580..7fafc9c4 100644
--- a/tests/f_h_unsigned/name
+++ b/tests/f_h_unsigned/name
@@ -1 +1 @@
-Unsigned HTREE directory
+unsigned HTREE directory
diff --git a/tests/f_holedir2/name b/tests/f_holedir2/name
index ec153f3d..144f5b39 100644
--- a/tests/f_holedir2/name
+++ b/tests/f_holedir2/name
@@ -1,2 +1 @@
directories with holes and zero i_size
-
diff --git a/tests/f_holedir3/name b/tests/f_holedir3/name
index a526787c..73b36123 100644
--- a/tests/f_holedir3/name
+++ b/tests/f_holedir3/name
@@ -1,2 +1 @@
real directories with holes and zero i_size
-
diff --git a/tests/f_miss_journal/name b/tests/f_miss_journal/name
index 599be529..b26d998a 100644
--- a/tests/f_miss_journal/name
+++ b/tests/f_miss_journal/name
@@ -1 +1 @@
-Non-existent journal inode
+non-existent journal inode
diff --git a/tests/f_recnect_bad/name b/tests/f_recnect_bad/name
index dc0c8d97..c1a9c0cb 100644
--- a/tests/f_recnect_bad/name
+++ b/tests/f_recnect_bad/name
@@ -1 +1 @@
-Reconnecting bad inode
+reconnecting bad inode
diff --git a/tests/f_selinux/name b/tests/f_selinux/name
index 42875eaa..4cdf4d2f 100644
--- a/tests/f_selinux/name
+++ b/tests/f_selinux/name
@@ -1 +1 @@
-SE Linux generated symlinks with EA data
+SELinux generated symlinks with EA data
diff --git a/tests/f_special_ea/name b/tests/f_special_ea/name
index 8dfb2f4d..e9fd85be 100644
--- a/tests/f_special_ea/name
+++ b/tests/f_special_ea/name
@@ -1 +1 @@
-Special files with extended attributes
+special files with extended attributes
diff --git a/tests/f_uninit_last_uninit/name b/tests/f_uninit_last_uninit/name
index 4f93e232..609e684a 100644
--- a/tests/f_uninit_last_uninit/name
+++ b/tests/f_uninit_last_uninit/name
@@ -1,2 +1 @@
last group has BLOCK_UNINIT set
-
diff --git a/tests/f_unused_itable/name b/tests/f_unused_itable/name
index e129137c..b899aecd 100644
--- a/tests/f_unused_itable/name
+++ b/tests/f_unused_itable/name
@@ -1 +1 @@
-Don't move files to lost+found for bg_unused_itable
+don't move files to lost+found for bg_unused_itable
diff --git a/tests/r_resize_inode/name b/tests/r_resize_inode/name
index 2783baf3..53e4e6fd 100644
--- a/tests/r_resize_inode/name
+++ b/tests/r_resize_inode/name
@@ -1,2 +1 @@
filesystem resize with a resize_inode present
-