Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef69d740 authored by Gaurav Minocha's avatar Gaurav Minocha Committed by Grant Likely
Browse files

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: default avatarGaurav Minocha <gaurav.minocha.os@gmail.com>
Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
parent 5f74d8b7
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -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;
+3 −0
Original line number Original line Diff line number Diff line
@@ -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;