* [PATCH] regmap: Disable debugfs when locking is disabled
@ 2017-12-12 17:13 Mark Brown
2017-12-13 15:50 ` Bartosz Golaszewski
0 siblings, 1 reply; 4+ messages in thread
From: Mark Brown @ 2017-12-12 17:13 UTC (permalink / raw)
To: Lars-Peter Clausen, Bartosz Golaszewski; +Cc: linux-kernel, Mark Brown
The recently added support for disabling the regmap internal locking left
debugfs enabled for devices with the locking disabled. This is a problem
since debugfs allows userspace to do things like initiate reads from the
hardware which will use the scratch buffers protected by the regmap locking
so could cause data corruption.
For safety address this by just disabling debugfs for these devices. That
is overly conservative since some of the debugfs files just read internal
data structures but it's much simpler to implmement and less likely to
lead to problems with tooling that works with debugfs.
Reported-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
Compile tested only so far.
drivers/base/regmap/internal.h | 8 ++++++++
drivers/base/regmap/regmap-debugfs.c | 3 +++
drivers/base/regmap/regmap.c | 1 +
3 files changed, 12 insertions(+)
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index 8641183cac2f..8d652023f8bd 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -77,6 +77,7 @@ struct regmap {
int async_ret;
#ifdef CONFIG_DEBUG_FS
+ bool debugfs_disable;
struct dentry *debugfs;
const char *debugfs_name;
@@ -215,10 +216,17 @@ struct regmap_field {
extern void regmap_debugfs_initcall(void);
extern void regmap_debugfs_init(struct regmap *map, const char *name);
extern void regmap_debugfs_exit(struct regmap *map);
+
+static void regmap_debugfs_disable(struct regmap *map)
+{
+ map->debugfs_disable = true;
+}
+
#else
static inline void regmap_debugfs_initcall(void) { }
static inline void regmap_debugfs_init(struct regmap *map, const char *name) { }
static inline void regmap_debugfs_exit(struct regmap *map) { }
+static inline void regmap_debugfs_disable(struct regmap *map) { }
#endif
/* regcache core declarations */
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
index 36ce3511c733..c8ecefd75d6f 100644
--- a/drivers/base/regmap/regmap-debugfs.c
+++ b/drivers/base/regmap/regmap-debugfs.c
@@ -529,6 +529,9 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
struct regmap_range_node *range_node;
const char *devname = "dummy";
+ if (map->debugfs_disable)
+ return;
+
/* If we don't have the debugfs root yet, postpone init */
if (!regmap_debugfs_root) {
struct regmap_debugfs_node *node;
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 1da2a9fc40b0..b884da59dd71 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -674,6 +674,7 @@ struct regmap *__regmap_init(struct device *dev,
if (config->disable_locking) {
map->lock = map->unlock = regmap_lock_unlock_empty;
+ regmap_debugfs_disable(map);
} else if (config->lock && config->unlock) {
map->lock = config->lock;
map->unlock = config->unlock;
--
2.15.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] regmap: Disable debugfs when locking is disabled
2017-12-12 17:13 [PATCH] regmap: Disable debugfs when locking is disabled Mark Brown
@ 2017-12-13 15:50 ` Bartosz Golaszewski
2017-12-13 16:47 ` Mark Brown
0 siblings, 1 reply; 4+ messages in thread
From: Bartosz Golaszewski @ 2017-12-13 15:50 UTC (permalink / raw)
To: Mark Brown; +Cc: Lars-Peter Clausen, Linux Kernel Mailing List
2017-12-12 18:13 GMT+01:00 Mark Brown <broonie@kernel.org>:
> The recently added support for disabling the regmap internal locking left
> debugfs enabled for devices with the locking disabled. This is a problem
> since debugfs allows userspace to do things like initiate reads from the
> hardware which will use the scratch buffers protected by the regmap locking
> so could cause data corruption.
>
> For safety address this by just disabling debugfs for these devices. That
> is overly conservative since some of the debugfs files just read internal
> data structures but it's much simpler to implmement and less likely to
> lead to problems with tooling that works with debugfs.
>
> Reported-by: Lars-Peter Clausen <lars@metafoo.de>
> Signed-off-by: Mark Brown <broonie@kernel.org>
> ---
>
> Compile tested only so far.
>
> drivers/base/regmap/internal.h | 8 ++++++++
> drivers/base/regmap/regmap-debugfs.c | 3 +++
> drivers/base/regmap/regmap.c | 1 +
> 3 files changed, 12 insertions(+)
>
> diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
> index 8641183cac2f..8d652023f8bd 100644
> --- a/drivers/base/regmap/internal.h
> +++ b/drivers/base/regmap/internal.h
> @@ -77,6 +77,7 @@ struct regmap {
> int async_ret;
>
> #ifdef CONFIG_DEBUG_FS
> + bool debugfs_disable;
> struct dentry *debugfs;
> const char *debugfs_name;
>
> @@ -215,10 +216,17 @@ struct regmap_field {
> extern void regmap_debugfs_initcall(void);
> extern void regmap_debugfs_init(struct regmap *map, const char *name);
> extern void regmap_debugfs_exit(struct regmap *map);
> +
> +static void regmap_debugfs_disable(struct regmap *map)
> +{
> + map->debugfs_disable = true;
> +}
> +
> #else
> static inline void regmap_debugfs_initcall(void) { }
> static inline void regmap_debugfs_init(struct regmap *map, const char *name) { }
> static inline void regmap_debugfs_exit(struct regmap *map) { }
> +static inline void regmap_debugfs_disable(struct regmap *map) { }
> #endif
>
> /* regcache core declarations */
> diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
> index 36ce3511c733..c8ecefd75d6f 100644
> --- a/drivers/base/regmap/regmap-debugfs.c
> +++ b/drivers/base/regmap/regmap-debugfs.c
> @@ -529,6 +529,9 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
> struct regmap_range_node *range_node;
> const char *devname = "dummy";
>
> + if (map->debugfs_disable)
> + return;
> +
I would still add the dev_dbg() here like in my version, since someone
may start wondering why the debugfs files are not being creating for
certain regmaps.
Thanks,
Bartosz
> /* If we don't have the debugfs root yet, postpone init */
> if (!regmap_debugfs_root) {
> struct regmap_debugfs_node *node;
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 1da2a9fc40b0..b884da59dd71 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -674,6 +674,7 @@ struct regmap *__regmap_init(struct device *dev,
>
> if (config->disable_locking) {
> map->lock = map->unlock = regmap_lock_unlock_empty;
> + regmap_debugfs_disable(map);
> } else if (config->lock && config->unlock) {
> map->lock = config->lock;
> map->unlock = config->unlock;
> --
> 2.15.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] regmap: Disable debugfs when locking is disabled
2017-12-13 15:50 ` Bartosz Golaszewski
@ 2017-12-13 16:47 ` Mark Brown
2017-12-13 17:00 ` Bartosz Golaszewski
0 siblings, 1 reply; 4+ messages in thread
From: Mark Brown @ 2017-12-13 16:47 UTC (permalink / raw)
To: Bartosz Golaszewski; +Cc: Lars-Peter Clausen, Linux Kernel Mailing List
[-- Attachment #1: Type: text/plain, Size: 303 bytes --]
On Wed, Dec 13, 2017 at 04:50:20PM +0100, Bartosz Golaszewski wrote:
> I would still add the dev_dbg() here like in my version, since someone
> may start wondering why the debugfs files are not being creating for
> certain regmaps.
Sure, can you send a patch for that please - I already applied mine?
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] regmap: Disable debugfs when locking is disabled
2017-12-13 16:47 ` Mark Brown
@ 2017-12-13 17:00 ` Bartosz Golaszewski
0 siblings, 0 replies; 4+ messages in thread
From: Bartosz Golaszewski @ 2017-12-13 17:00 UTC (permalink / raw)
To: Mark Brown; +Cc: Lars-Peter Clausen, Linux Kernel Mailing List
2017-12-13 17:47 GMT+01:00 Mark Brown <broonie@kernel.org>:
> On Wed, Dec 13, 2017 at 04:50:20PM +0100, Bartosz Golaszewski wrote:
>
>> I would still add the dev_dbg() here like in my version, since someone
>> may start wondering why the debugfs files are not being creating for
>> certain regmaps.
>
> Sure, can you send a patch for that please - I already applied mine?
Done.
Thanks,
Bartosz
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-12-13 17:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-12 17:13 [PATCH] regmap: Disable debugfs when locking is disabled Mark Brown
2017-12-13 15:50 ` Bartosz Golaszewski
2017-12-13 16:47 ` Mark Brown
2017-12-13 17:00 ` Bartosz Golaszewski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox