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

Commit 6e64b6cc authored by Pankaj Dubey's avatar Pankaj Dubey Committed by Mark Brown
Browse files

regmap: fix NULL pointer dereference in regmap_get_val_endian



Recents commits for getting reg endianness causing NULL pointer
dereference if dev is passed NULL in regmap_init_mmio. This patch
fixes this issue, and allows to parse reg endianness only if dev
and dev->of_node exist.

Signed-off-by: default avatarPankaj Dubey <pankaj.dubey@samsung.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent cf673fbc
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -477,7 +477,7 @@ static enum regmap_endian regmap_get_val_endian(struct device *dev,
					const struct regmap_bus *bus,
					const struct regmap_config *config)
{
	struct device_node *np = dev->of_node;
	struct device_node *np;
	enum regmap_endian endian;

	/* Retrieve the endianness specification from the regmap config */
@@ -487,6 +487,10 @@ static enum regmap_endian regmap_get_val_endian(struct device *dev,
	if (endian != REGMAP_ENDIAN_DEFAULT)
		return endian;

	/* If the dev and dev->of_node exist try to get endianness from DT */
	if (dev && dev->of_node) {
		np = dev->of_node;

		/* Parse the device's DT node for an endianness specification */
		if (of_property_read_bool(np, "big-endian"))
			endian = REGMAP_ENDIAN_BIG;
@@ -496,6 +500,7 @@ static enum regmap_endian regmap_get_val_endian(struct device *dev,
		/* If the endianness was specified in DT, use that */
		if (endian != REGMAP_ENDIAN_DEFAULT)
			return endian;
	}

	/* Retrieve the endianness specification from the bus config */
	if (bus && bus->val_format_endian_default)