]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
staging: vchiq_debugfs: Fix NPD in vchiq_dump_state
authorStefan Wahren <wahrenst@gmx.net>
Fri, 24 May 2024 15:15:42 +0000 (17:15 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Jun 2024 11:36:44 +0000 (13:36 +0200)
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>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Link: https://lore.kernel.org/r/20240524151542.19415-1-wahrenst@gmx.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h

index 297af1d80b12bdc8a089910743b9c64e786d186e..69daeba974f2dc19ef7d7e7ba62e74eafd3dcbaf 100644 (file)
@@ -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);
index 54e7bf029d9a1f977ab6c3860aafd7afdf4ff1aa..1f74d0bb33bae602541f7822400ce32ae5499dfa 100644 (file)
@@ -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);
 }
 
index e9bf055a4ca958fff8a131080891dd7fb3425192..fabffd81b1ec9a1d5e522496f26ee9262216aa47 100644 (file)
@@ -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);