Only allow (re-)assignment to an UBI partition/device when UBIFS is
currently not mounted. Otherwise the following UBIFS commands will
crash.

Signed-off-by: Stefan Roese <s...@denx.de>
---
 common/cmd_ubi.c   |   13 +++++++++++++
 common/cmd_ubifs.c |    5 +++++
 2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index 7692ac7..1e73f48 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -42,6 +42,8 @@ struct selected_dev {
 
 static struct selected_dev ubi_dev;
 
+int ubifs_is_mounted(void);
+
 static void ubi_dump_vol_info(const struct ubi_volume *vol)
 {
        ubi_msg("volume information dump:");
@@ -472,6 +474,17 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, 
char * const argv[])
                if (argc < 3)
                        return cmd_usage(cmdtp);
 
+               /*
+                * Only allow (re-)assignment to an UBI partition/device
+                * when UBIFS is currently not mounted. Otherwise
+                * the following UBIFS commands will crash.
+                */
+               if (ubifs_is_mounted()) {
+                       printf("UBIFS is currently mounted!"
+                              " Unmount using ubifsumount first!\n");
+                       return -EPERM;
+               }
+
                /* todo: get dev number for NAND... */
                ubi_dev.nr = 0;
 
diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c
index 9526780..76fe057 100644
--- a/common/cmd_ubifs.c
+++ b/common/cmd_ubifs.c
@@ -92,6 +92,11 @@ int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, 
char * const argv[])
        return 0;
 }
 
+int ubifs_is_mounted(void)
+{
+       return ubifs_mounted;
+}
+
 int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        char *filename = "/";
-- 
1.7.3.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to