diff options
Diffstat (limited to 'drivers/base/firmware_loader')
| -rw-r--r-- | drivers/base/firmware_loader/fallback.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index 7f732744f0d3..b5c865fe263b 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -219,11 +219,6 @@ static ssize_t firmware_loading_show(struct device *dev,  	return sprintf(buf, "%d\n", loading);  } -/* Some architectures don't have PAGE_KERNEL_RO */ -#ifndef PAGE_KERNEL_RO -#define PAGE_KERNEL_RO PAGE_KERNEL -#endif -  /* one pages buffer should be mapped/unmapped only once */  static int map_fw_priv_pages(struct fw_priv *fw_priv)  { @@ -651,6 +646,8 @@ static bool fw_force_sysfs_fallback(enum fw_opt opt_flags)  static bool fw_run_sysfs_fallback(enum fw_opt opt_flags)  { +	int ret; +  	if (fw_fallback_config.ignore_sysfs_fallback) {  		pr_info_once("Ignoring firmware sysfs fallback due to sysctl knob\n");  		return false; @@ -659,6 +656,11 @@ static bool fw_run_sysfs_fallback(enum fw_opt opt_flags)  	if ((opt_flags & FW_OPT_NOFALLBACK))  		return false; +	/* Also permit LSMs and IMA to fail firmware sysfs fallback */ +	ret = security_kernel_load_data(LOADING_FIRMWARE); +	if (ret < 0) +		return ret; +  	return fw_force_sysfs_fallback(opt_flags);  } |