We assume that modification of some special application could result in zeroed
name_len, or it is consciously made by somebody. We will deadloop in
find_in_block when name_len of dir entry is zero.

This patch is added for preventing deadloop in above scenario.

Signed-off-by: Chao Yu <chao2...@samsung.com>
---
 fs/f2fs/dir.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index be8c7af..4316ec5 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -121,6 +121,16 @@ static struct f2fs_dir_entry *find_in_block(struct page 
*dentry_page,
                        }
                }
 
+               /* check name_len to prevent from deadloop here */
+               if (unlikely(de->name_len == 0)) {
+                       struct inode *inode = dentry_page->mapping->host;
+
+                       f2fs_msg(inode->i_sb, KERN_ERR,
+                               "zero-length dir entry, ino = %lu, name = %s",
+                               (unsigned long)inode->i_ino, name->name);
+                       break;
+               }
+
                bit_start = bit_pos
                                + GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
        }
-- 
1.7.9.5



------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to