diff options
author | Xiubo Li <Li.Xiubo@freescale.com> | 2014-09-27 23:35:25 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2014-09-28 06:49:56 -0400 |
commit | 2c98e0c1cc6b8e86f1978286c3d4e0769ee9d733 (patch) | |
tree | cf818461ea3155d8be7e5dd4ff068b936b691282 | |
parent | 7d1311b93e58ed55f3a31cc8f94c4b8fe988a2b9 (diff) |
regmap: debugfs: fix possbile NULL pointer dereference
If 'map->dev' is NULL and there will lead dev_name() to be NULL pointer
dereference. So before dev_name(), we need to have check of the map->dev
pionter.
We also should make sure that the 'name' pointer shouldn't be NULL for
debugfs_create_dir(). So here using one default "dummy" debugfs name when
the 'name' pointer and 'map->dev' are both NULL.
Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/base/regmap/regmap-debugfs.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c index 45d812c0ea77..bdd88708e4d6 100644 --- a/drivers/base/regmap/regmap-debugfs.c +++ b/drivers/base/regmap/regmap-debugfs.c | |||
@@ -473,6 +473,7 @@ void regmap_debugfs_init(struct regmap *map, const char *name) | |||
473 | { | 473 | { |
474 | struct rb_node *next; | 474 | struct rb_node *next; |
475 | struct regmap_range_node *range_node; | 475 | struct regmap_range_node *range_node; |
476 | const char *devname = "dummy"; | ||
476 | 477 | ||
477 | /* If we don't have the debugfs root yet, postpone init */ | 478 | /* If we don't have the debugfs root yet, postpone init */ |
478 | if (!regmap_debugfs_root) { | 479 | if (!regmap_debugfs_root) { |
@@ -491,12 +492,15 @@ void regmap_debugfs_init(struct regmap *map, const char *name) | |||
491 | INIT_LIST_HEAD(&map->debugfs_off_cache); | 492 | INIT_LIST_HEAD(&map->debugfs_off_cache); |
492 | mutex_init(&map->cache_lock); | 493 | mutex_init(&map->cache_lock); |
493 | 494 | ||
495 | if (map->dev) | ||
496 | devname = dev_name(map->dev); | ||
497 | |||
494 | if (name) { | 498 | if (name) { |
495 | map->debugfs_name = kasprintf(GFP_KERNEL, "%s-%s", | 499 | map->debugfs_name = kasprintf(GFP_KERNEL, "%s-%s", |
496 | dev_name(map->dev), name); | 500 | devname, name); |
497 | name = map->debugfs_name; | 501 | name = map->debugfs_name; |
498 | } else { | 502 | } else { |
499 | name = dev_name(map->dev); | 503 | name = devname; |
500 | } | 504 | } |
501 | 505 | ||
502 | map->debugfs = debugfs_create_dir(name, regmap_debugfs_root); | 506 | map->debugfs = debugfs_create_dir(name, regmap_debugfs_root); |