aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/erofs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/erofs/dir.c')
-rw-r--r--drivers/staging/erofs/dir.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/staging/erofs/dir.c b/drivers/staging/erofs/dir.c
index d1cb0d78ab84..833f052f79d0 100644
--- a/drivers/staging/erofs/dir.c
+++ b/drivers/staging/erofs/dir.c
@@ -53,8 +53,11 @@ static int erofs_fill_dentries(struct dir_context *ctx,
strnlen(de_name, maxsize - nameoff) :
le16_to_cpu(de[1].nameoff) - nameoff;
- /* the corrupted directory found */
- BUG_ON(de_namelen < 0);
+ /* a corrupted entry is found */
+ if (unlikely(de_namelen < 0)) {
+ DBG_BUGON(1);
+ return -EIO;
+ }
#ifdef CONFIG_EROFS_FS_DEBUG
dbg_namelen = min(EROFS_NAME_LEN - 1, de_namelen);
@@ -66,8 +69,8 @@ static int erofs_fill_dentries(struct dir_context *ctx,
#endif
if (!dir_emit(ctx, de_name, de_namelen,
- le64_to_cpu(de->nid), d_type))
- /* stoped by some reason */
+ le64_to_cpu(de->nid), d_type))
+ /* stopped by some reason */
return 1;
++de;
*ofs += sizeof(struct erofs_dirent);