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


Reply via email to