From e3ba01ec76bcfcde36091ff75161730d17f8bb5e Mon Sep 17 00:00:00 2001 From: "Peter A. Bigot" Date: Sat, 20 Jul 2019 16:56:01 -0500 Subject: [PATCH] subsys/storage/flash_map: detect missing flash device If the flash device is not configured, return an error rather than dereferencing a null device pointer. Signed-off-by: Peter A. Bigot --- subsys/settings/src/settings_init.c | 4 +++- subsys/storage/flash_map/flash_map.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/subsys/settings/src/settings_init.c b/subsys/settings/src/settings_init.c index e1d03c286fb..79641d1d8f5 100644 --- a/subsys/settings/src/settings_init.c +++ b/subsys/settings/src/settings_init.c @@ -80,7 +80,9 @@ int settings_backend_init(void) rc = flash_area_get_sectors(DT_FLASH_AREA_STORAGE_ID, &cnt, settings_fcb_area); - if (rc != 0 && rc != -ENOMEM) { + if (rc == -ENODEV) { + return rc; + } else if (rc != 0 && rc != -ENOMEM) { k_panic(); } diff --git a/subsys/storage/flash_map/flash_map.c b/subsys/storage/flash_map/flash_map.c index 28441f45196..9f3c9053b83 100644 --- a/subsys/storage/flash_map/flash_map.c +++ b/subsys/storage/flash_map/flash_map.c @@ -139,6 +139,9 @@ flash_page_cb cb, struct layout_data *cb_data) cb_data->status = 0; flash_dev = device_get_binding(fa->fa_dev_name); + if (flash_dev == NULL) { + return -ENODEV; + } flash_page_foreach(flash_dev, cb, cb_data);