If the volume is in strict mode, generi c_ci_compare can report a broken
encoding name.  This will not trigger on a bad lookup, which is caught
earlier, only if the actual disk name is bad.

Suggested-by: Gabriel Krisman Bertazi <kris...@suse.de>
Signed-off-by: Eugen Hristev <eugen.hris...@collabora.com>
---
 fs/f2fs/dir.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 88b0045d0c4f..3b0003e8767a 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -192,11 +192,22 @@ static inline int f2fs_match_name(const struct inode *dir,
        struct fscrypt_name f;
 
 #if IS_ENABLED(CONFIG_UNICODE)
-       if (fname->cf_name.name)
-               return generic_ci_match(dir, fname->usr_fname,
-                                       &fname->cf_name,
-                                       de_name, de_name_len);
-
+       if (fname->cf_name.name) {
+               int ret = generic_ci_match(dir, fname->usr_fname,
+                                          &fname->cf_name,
+                                          de_name, de_name_len);
+               if (ret < 0) {
+                       /*
+                        * Treat comparison errors as not a match.  The
+                        * only case where it happens is on a disk
+                        * corruption or ENOMEM.
+                        */
+                       if (ret == -EINVAL)
+                               f2fs_warn(F2FS_SB(dir->i_sb),
+                                       "Directory contains filename that is 
invalid UTF-8");
+               }
+               return ret;
+       }
 #endif
        f.usr_fname = fname->usr_fname;
        f.disk_name = fname->disk_name;
-- 
2.34.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to