From: Russell King Date: Sun, 24 Mar 2019 11:02:02 +0000 (+0000) Subject: fs/adfs: remove truncated filename hashing X-Git-Tag: Ubuntu-5.10.0-12.13~5232^2~2 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=2eb0684f977123bfa5a565a57d219870085b78e8;p=mirror_ubuntu-hirsute-kernel.git fs/adfs: remove truncated filename hashing fs/adfs support for truncated filenames is broken, and there is a desire not to support this into the future. Let's remove the fs/adfs support for this. Viro says: "FWIW, the word from Linus had been basically "kill it off" on truncation." That being: "Make it so. Make the rule be that d_hash() can only change the hash itself, rather than the subtle special case for len that we had because of legacy reasons.." Acked-by: Al Viro Signed-off-by: Russell King --- diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c index 877d5cffe9e9..5d88108339df 100644 --- a/fs/adfs/dir.c +++ b/fs/adfs/dir.c @@ -214,22 +214,17 @@ const struct file_operations adfs_dir_operations = { static int adfs_hash(const struct dentry *parent, struct qstr *qstr) { - const unsigned int name_len = ADFS_SB(parent->d_sb)->s_namelen; const unsigned char *name; unsigned long hash; - int i; + u32 len; - if (qstr->len < name_len) - return 0; + if (qstr->len > ADFS_SB(parent->d_sb)->s_namelen) + return -ENAMETOOLONG; - /* - * Truncate the name in place, avoids - * having to define a compare function. - */ - qstr->len = i = name_len; + len = qstr->len; name = qstr->name; hash = init_name_hash(parent); - while (i--) + while (len--) hash = partial_name_hash(adfs_tolower(*name++), hash); qstr->hash = end_name_hash(hash);