fs: ext4: Unmount FS in do_fs_type()
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Wed, 6 Feb 2019 12:19:29 +0000 (13:19 +0100)
committerVagrant Cascadian <vagrant@debian.org>
Fri, 19 Apr 2019 23:43:08 +0000 (00:43 +0100)
Unlike other generic FS accessors, fs_get_info() does not call fs_close()
at the end of it's operation. Thus, using fs_get_info() in do_fs_type()
without calling fs_close() causes potential memory leak by creating new
filesystem structures on each call of do_fs_type().

The test case to trigger this problem is as follows. It is required to
have ext4 filesystem on the first partition of the SDMMC device, since
ext4 requires stateful mount and causes memory allocation.
=> while true ; do mmc rescan ; fstype mmc 1 ; done
Eventually, the mounting of ext4 will fail due to malloc failures
and the filesystem will not be correctly detected.

This patch fixes the problem by adding the missing fs_close().

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Gbp-Pq: Topic upstream
Gbp-Pq: Name fs-ext4-Unmount-FS-in-do_fs_type.patch

fs/fs.c

diff --git a/fs/fs.c b/fs/fs.c
index cb265174e2f2eb446bd6003903cb1e1408aa6f4e..b9e74d85982a971df1f320fa10954a644ad014d4 100644 (file)
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -751,6 +751,8 @@ int do_fs_type(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        else
                printf("%s\n", info->name);
 
+       fs_close();
+
        return CMD_RET_SUCCESS;
 }