mirror of https://gitee.com/openkylin/linux.git
of: Disabling OF functions that use sysfs if CONFIG_SYSFS disabled
This patch is to the fix the recent runtime bug in kernel reported by
<fengguang.wu@intel.com>. The bug was exposed by commit b951f9dc
,
"Enabling OF selftest to run without machine's devicetree" and is
exposed when CONFIG_OF_SELFTEST is enabled and CONFIG_SYSFS is
disabled.
Mail Subject: [OF test] BUG: unable to handle kernel NULL pointer
dereference at 00000038
Tested on x86 and arm architecture
Signed-off-by: Gaurav Minocha <gaurav.minocha.os@gmail.com>
Signed-off-by: Grant Likely <grant.likely@linaro.org>
This commit is contained in:
parent
5f74d8b7b8
commit
ef69d74035
|
@ -138,6 +138,9 @@ int __of_add_property_sysfs(struct device_node *np, struct property *pp)
|
||||||
/* Important: Don't leak passwords */
|
/* Important: Don't leak passwords */
|
||||||
bool secure = strncmp(pp->name, "security-", 9) == 0;
|
bool secure = strncmp(pp->name, "security-", 9) == 0;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_SYSFS))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!of_kset || !of_node_is_attached(np))
|
if (!of_kset || !of_node_is_attached(np))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -158,6 +161,9 @@ int __of_attach_node_sysfs(struct device_node *np)
|
||||||
struct property *pp;
|
struct property *pp;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_SYSFS))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!of_kset)
|
if (!of_kset)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1713,6 +1719,9 @@ int __of_remove_property(struct device_node *np, struct property *prop)
|
||||||
|
|
||||||
void __of_remove_property_sysfs(struct device_node *np, struct property *prop)
|
void __of_remove_property_sysfs(struct device_node *np, struct property *prop)
|
||||||
{
|
{
|
||||||
|
if (!IS_ENABLED(CONFIG_SYSFS))
|
||||||
|
return;
|
||||||
|
|
||||||
/* at early boot, bail here and defer setup to of_init() */
|
/* at early boot, bail here and defer setup to of_init() */
|
||||||
if (of_kset && of_node_is_attached(np))
|
if (of_kset && of_node_is_attached(np))
|
||||||
sysfs_remove_bin_file(&np->kobj, &prop->attr);
|
sysfs_remove_bin_file(&np->kobj, &prop->attr);
|
||||||
|
@ -1777,6 +1786,9 @@ int __of_update_property(struct device_node *np, struct property *newprop,
|
||||||
void __of_update_property_sysfs(struct device_node *np, struct property *newprop,
|
void __of_update_property_sysfs(struct device_node *np, struct property *newprop,
|
||||||
struct property *oldprop)
|
struct property *oldprop)
|
||||||
{
|
{
|
||||||
|
if (!IS_ENABLED(CONFIG_SYSFS))
|
||||||
|
return;
|
||||||
|
|
||||||
/* At early boot, bail out and defer setup to of_init() */
|
/* At early boot, bail out and defer setup to of_init() */
|
||||||
if (!of_kset)
|
if (!of_kset)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -45,6 +45,9 @@ void __of_detach_node_sysfs(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct property *pp;
|
struct property *pp;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_SYSFS))
|
||||||
|
return;
|
||||||
|
|
||||||
BUG_ON(!of_node_is_initialized(np));
|
BUG_ON(!of_node_is_initialized(np));
|
||||||
if (!of_kset)
|
if (!of_kset)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue