From 92e9a5e0a7f2634c670ffe8056430b94d210a4c0 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 27 Jul 2015 23:40:19 +0100 Subject: [PATCH] stmhal: Check if user block device is mounted before accessing it. In particular this fixes a bug where pyb.sync (and os.sync) fail because they try to sync the user mounted device even if it's not mounted. --- stmhal/diskio.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/stmhal/diskio.c b/stmhal/diskio.c index 9cae46eb18..3b0c86d5b1 100644 --- a/stmhal/diskio.c +++ b/stmhal/diskio.c @@ -151,6 +151,10 @@ DRESULT disk_read ( #endif case PD_USER: + if (fs_user_mount == NULL) { + // nothing mounted + return RES_ERROR; + } fs_user_mount->readblocks[2] = MP_OBJ_NEW_SMALL_INT(sector); fs_user_mount->readblocks[3] = mp_obj_new_bytearray_by_ref(count * 512, buff); mp_call_method_n_kw(2, 0, fs_user_mount->readblocks); @@ -190,6 +194,10 @@ DRESULT disk_write ( #endif case PD_USER: + if (fs_user_mount == NULL) { + // nothing mounted + return RES_ERROR; + } if (fs_user_mount->writeblocks[0] == MP_OBJ_NULL) { // read-only block device return RES_ERROR; @@ -243,6 +251,10 @@ DRESULT disk_ioctl ( #endif case PD_USER: + if (fs_user_mount == NULL) { + // nothing mounted + return RES_ERROR; + } switch (cmd) { case CTRL_SYNC: if (fs_user_mount->sync[0] != MP_OBJ_NULL) {