misc_register() exposes the fsl-mc UAPI device before its mutex and
static portal pointer are initialized. A userspace open racing device
creation can consequently lock an uninitialized mutex or observe
incomplete state.
Initialize the UAPI state before registering the misc device.
Fixes: 2cf1e703f066 ("bus: fsl-mc: add fsl-mc userspace support")
Cc: [email protected]
Signed-off-by: Jiale Yao <[email protected]>
---
drivers/bus/fsl-mc/fsl-mc-uapi.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/bus/fsl-mc/fsl-mc-uapi.c b/drivers/bus/fsl-mc/fsl-mc-uapi.c
index aaa14f17aef4..2c586dd787f3 100644
--- a/drivers/bus/fsl-mc/fsl-mc-uapi.c
+++ b/drivers/bus/fsl-mc/fsl-mc-uapi.c
@@ -586,15 +586,13 @@ int fsl_mc_uapi_create_device_file(struct fsl_mc_bus
*mc_bus)
mc_uapi->misc.minor = MISC_DYNAMIC_MINOR;
mc_uapi->misc.name = dev_name(&mc_dev->dev);
mc_uapi->misc.fops = &fsl_mc_uapi_dev_fops;
+ mc_uapi->static_mc_io = mc_bus->mc_dev.mc_io;
+ mutex_init(&mc_uapi->mutex);
error = misc_register(&mc_uapi->misc);
if (error)
return error;
- mc_uapi->static_mc_io = mc_bus->mc_dev.mc_io;
-
- mutex_init(&mc_uapi->mutex);
-
return 0;
}
--
2.34.1