On Mon, Sep 14, 2026 at 03:49:00PM +0800, Yingchao Deng wrote:
cscfg_create_device() calls put_device() on the error path while holding cscfg_mutex. If device_register() fails, put_device() drops the last reference and invokes cscfg_dev_release(), which takes cscfg_mutex again, deadlocking.
Module init and exit are serialized by the kernel, so cscfg_mutex is not needed to protect the allocation and freeing of cscfg_mgr. Remove the mutex from cscfg_dev_release() and take it only while cscfg_mgr fields are being accessed.
Fixes: 199380decc5f ("coresight: configfs: Fix unload of configurations on module exit") Suggested-by: Leo Yan leo.yan@arm.com Signed-off-by: Yingchao Deng dengyingchao@kylinsec.com.cn
For this patch:
Reviewed-by: Leo Yan leo.yan@arm.com
Sashiko reported an issue for null pointer dereference if configfs init fails fails [1]. It is good to fix it using a separate patch:
@@ -1299,8 +1299,10 @@ int __init cscfg_init(void)
/* initialise configfs subsystem */ err = cscfg_configfs_init(cscfg_mgr); - if (err) - goto exit_err; + if (err) { + device_unregister(cscfg_device()); + return err; + }
/* preload built-in configurations */ err = cscfg_preload(THIS_MODULE);
@Yingchao, do you mind to work out a formal patch for this?
Thanks, Leo
[1] https://sashiko.dev/#/patchset/6CC680FFAC60931F%2B20260914074900.1711-1-deng...