From d5f8d30d66efffd34254469ea6a24b4eb7ec5243 Mon Sep 17 00:00:00 2001 From: Andrzej Stalke Date: Tue, 24 Jan 2023 16:09:44 +0100 Subject: [PATCH] ext2: Fix _ext2_dir_read() skipping last entries in a directory Fixes phoenix-rtos/phoenix-rtos-project#581 DONE: RTOS-322 --- ext2/dir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ext2/dir.c b/ext2/dir.c index 7d98cab7..a7d093c5 100644 --- a/ext2/dir.c +++ b/ext2/dir.c @@ -129,9 +129,14 @@ int _ext2_dir_read(ext2_t *fs, ext2_obj_t *dir, offs_t offs, struct dirent *res, if ((entry = (ext2_dirent_t *)malloc(len)) == NULL) return -ENOMEM; - if ((ret = _ext2_file_read(fs, dir, offs, (char *)entry, len)) != len) { + if ((ret = _ext2_file_read(fs, dir, offs, (char *)entry, len)) < 0) { free(entry); - return (ret < 0) ? (int)ret : -ENOENT; + return ret; + } + + if (((size_t)ret < sizeof(ext2_dirent_t)) || ((size_t)ret < sizeof(ext2_dirent_t) + entry->len)) { + free(entry); + return -ENOENT; } if (!entry->len) {