diff mbox series

staging: vchiq_debugfs: Fix NPD in vchiq_dump_state

Message ID 20240524151542.19415-1-wahrenst@gmx.net (mailing list archive)
State New, archived
Headers show
Series staging: vchiq_debugfs: Fix NPD in vchiq_dump_state | expand

Commit Message

Stefan Wahren May 24, 2024, 3:15 p.m. UTC
The commit 42a2f6664e18 ("staging: vc04_services: Move global g_state
to vchiq_state") falsely assumed that the debugfs entry vchiq/state
was created with vchiq_instance as data. This causes now a NULL
pointer derefence while trying to dump the vchiq state. So fix
this by passing vchiq_state as data, because this is the relevant
part here.

Fixes: 42a2f6664e18 ("staging: vc04_services: Move global g_state to vchiq_state")
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
---
 .../staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 2 +-
 .../vc04_services/interface/vchiq_arm/vchiq_debugfs.c     | 8 ++++----
 .../vc04_services/interface/vchiq_arm/vchiq_debugfs.h     | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

--
2.34.1

Comments

Umang Jain May 27, 2024, 3:48 a.m. UTC | #1
Hi Stefan,

Thanks for the fixup!

On 24/05/24 8:45 pm, Stefan Wahren wrote:
> The commit 42a2f6664e18 ("staging: vc04_services: Move global g_state
> to vchiq_state") falsely assumed that the debugfs entry vchiq/state
> was created with vchiq_instance as data. This causes now a NULL
> pointer derefence while trying to dump the vchiq state. So fix
> this by passing vchiq_state as data, because this is the relevant
> part here.
>
> Fixes: 42a2f6664e18 ("staging: vc04_services: Move global g_state to vchiq_state")
> Signed-off-by: Stefan Wahren <wahrenst@gmx.net>

LGTM,

Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
> ---
>   .../staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 2 +-
>   .../vc04_services/interface/vchiq_arm/vchiq_debugfs.c     | 8 ++++----
>   .../vc04_services/interface/vchiq_arm/vchiq_debugfs.h     | 2 +-
>   3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> index 297af1d80b12..69daeba974f2 100644
> --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> @@ -1759,7 +1759,7 @@ static int vchiq_probe(struct platform_device *pdev)
>   	if (err)
>   		goto failed_platform_init;
>
> -	vchiq_debugfs_init();
> +	vchiq_debugfs_init(&mgmt->state);
>
>   	dev_dbg(&pdev->dev, "arm: platform initialised - version %d (min %d)\n",
>   		VCHIQ_VERSION, VCHIQ_VERSION_MIN);
> diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
> index 54e7bf029d9a..1f74d0bb33ba 100644
> --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
> +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
> @@ -42,9 +42,9 @@ static int debugfs_trace_show(struct seq_file *f, void *offset)
>
>   static int vchiq_dump_show(struct seq_file *f, void *offset)
>   {
> -	struct vchiq_instance *instance = f->private;
> +	struct vchiq_state *state = f->private;
>
> -	vchiq_dump_state(f, instance->state);
> +	vchiq_dump_state(f, state);
>
>   	return 0;
>   }
> @@ -121,12 +121,12 @@ void vchiq_debugfs_remove_instance(struct vchiq_instance *instance)
>   	debugfs_remove_recursive(node->dentry);
>   }
>
> -void vchiq_debugfs_init(void)
> +void vchiq_debugfs_init(struct vchiq_state *state)
>   {
>   	vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL);
>   	vchiq_dbg_clients = debugfs_create_dir("clients", vchiq_dbg_dir);
>
> -	debugfs_create_file("state", S_IFREG | 0444, vchiq_dbg_dir, NULL,
> +	debugfs_create_file("state", S_IFREG | 0444, vchiq_dbg_dir, state,
>   			    &vchiq_dump_fops);
>   }
>
> diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
> index e9bf055a4ca9..fabffd81b1ec 100644
> --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
> +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
> @@ -10,7 +10,7 @@ struct vchiq_debugfs_node {
>   	struct dentry *dentry;
>   };
>
> -void vchiq_debugfs_init(void);
> +void vchiq_debugfs_init(struct vchiq_state *state);
>
>   void vchiq_debugfs_deinit(void);
>
> --
> 2.34.1
>
diff mbox series

Patch

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 297af1d80b12..69daeba974f2 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -1759,7 +1759,7 @@  static int vchiq_probe(struct platform_device *pdev)
 	if (err)
 		goto failed_platform_init;

-	vchiq_debugfs_init();
+	vchiq_debugfs_init(&mgmt->state);

 	dev_dbg(&pdev->dev, "arm: platform initialised - version %d (min %d)\n",
 		VCHIQ_VERSION, VCHIQ_VERSION_MIN);
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
index 54e7bf029d9a..1f74d0bb33ba 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
@@ -42,9 +42,9 @@  static int debugfs_trace_show(struct seq_file *f, void *offset)

 static int vchiq_dump_show(struct seq_file *f, void *offset)
 {
-	struct vchiq_instance *instance = f->private;
+	struct vchiq_state *state = f->private;

-	vchiq_dump_state(f, instance->state);
+	vchiq_dump_state(f, state);

 	return 0;
 }
@@ -121,12 +121,12 @@  void vchiq_debugfs_remove_instance(struct vchiq_instance *instance)
 	debugfs_remove_recursive(node->dentry);
 }

-void vchiq_debugfs_init(void)
+void vchiq_debugfs_init(struct vchiq_state *state)
 {
 	vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL);
 	vchiq_dbg_clients = debugfs_create_dir("clients", vchiq_dbg_dir);

-	debugfs_create_file("state", S_IFREG | 0444, vchiq_dbg_dir, NULL,
+	debugfs_create_file("state", S_IFREG | 0444, vchiq_dbg_dir, state,
 			    &vchiq_dump_fops);
 }

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
index e9bf055a4ca9..fabffd81b1ec 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
@@ -10,7 +10,7 @@  struct vchiq_debugfs_node {
 	struct dentry *dentry;
 };

-void vchiq_debugfs_init(void);
+void vchiq_debugfs_init(struct vchiq_state *state);

 void vchiq_debugfs_deinit(void);