]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
debugfs: Use the hash_version from superblock if a file system is opened
authorSrivathsa Dara <srivathsa.d.dara@oracle.com>
Thu, 24 Aug 2023 06:56:34 +0000 (06:56 +0000)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 3 Dec 2023 02:17:55 +0000 (21:17 -0500)
The debugfs program's dx_hash command computes the hash for the given
filename, taking the hash_seed and hash_version (i.e hash algorithm)
as arguments.  So the user has to refer to the superblock to get these
values used by the filesystem.  So if debugfs has an opened file
system, use those values from the current file system.

[ Fixed patch to avoid crashing when a file system is not opened. --TYT ]

Signed-off-by: Srivathsa Dara <srivathsa.d.dara@oracle.com>
Link: https://lore.kernel.org/r/20230824065634.2662858-1-srivathsa.d.dara@oracle.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
debugfs/htree.c

index a9f9211ba563108a9e2d04946004a1d277328bce..a3e95ddb091c91f554d841ba4c9fb806d4f1589b 100644 (file)
@@ -336,11 +336,18 @@ void do_dx_hash(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
        errcode_t       err;
        int             c;
        int             hash_version = 0;
-       __u32           hash_seed[4];
+       __u32           hash_seed[4] = { 0, };
        int             hash_flags = 0;
        const struct ext2fs_nls_table *encoding = NULL;
 
-       hash_seed[0] = hash_seed[1] = hash_seed[2] = hash_seed[3] = 0;
+       if (current_fs) {
+               hash_seed[0] = current_fs->super->s_hash_seed[0];
+               hash_seed[1] = current_fs->super->s_hash_seed[1];
+               hash_seed[2] = current_fs->super->s_hash_seed[2];
+               hash_seed[3] = current_fs->super->s_hash_seed[3];
+
+               hash_version = current_fs->super->s_def_hash_version;
+       }
 
        reset_getopt();
        while ((c = getopt(argc, argv, "h:s:ce:")) != EOF) {