Without the SCONFIG_FS_EXTERNAL, the bus of the driver for pstore will not load, resulting in a missing driver for pstore and an error during bootup. Only mount the /pstore if FS_EXTERNAL is allowed by the security policy.
Signed-off-by: Fabian Pflug <[email protected]> --- v2: remove the umount add unregister_handler common/startup.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/common/startup.c b/common/startup.c index 4313435f05..7cf7088ad6 100644 --- a/common/startup.c +++ b/common/startup.c @@ -55,6 +55,22 @@ extern exitcall_t __barebox_exitcalls_start[], __barebox_exitcalls_end[]; enum system_states barebox_system_state; #if defined CONFIG_FS_RAMFS && defined CONFIG_FS_DEVFS +static struct sconfig_notifier_block sconfig_notifier; + +static void mount_pstore(struct sconfig_notifier_block *nb, + enum security_config_option opt, bool allowed) +{ + if (allowed) { + mkdir("/pstore", 0); + mount("none", "pstore", "/pstore", NULL); + sconfig_unregister_handler(&sconfig_notifier); + } + /* + * no need to umount, since the permission is only needed for mounting, + * not for accessing the content. + */ +} + static int mount_root(void) { mount("none", "ramfs", "/", NULL); @@ -69,8 +85,14 @@ static int mount_root(void) } if (IS_ENABLED(CONFIG_FS_PSTORE)) { - mkdir("/pstore", 0); - mount("none", "pstore", "/pstore", NULL); + if (IS_ALLOWED(SCONFIG_FS_EXTERNAL)) { + mkdir("/pstore", 0); + mount("none", "pstore", "/pstore", NULL); + } else { + sconfig_register_handler_filtered(&sconfig_notifier, + mount_pstore, + SCONFIG_FS_EXTERNAL); + } } if (IS_ENABLED(CONFIG_9P_FS)) -- 2.47.3
