net: wwan: iosm: Call mutex_init before locking it
authorMaxim Mikityanskiy <maxtram95@gmail.com>
Sat, 1 Oct 2022 10:57:13 +0000 (13:57 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Oct 2022 12:25:43 +0000 (13:25 +0100)
wwan_register_ops calls wwan_create_default_link, which ends up in the
ipc_wwan_newlink callback that locks ipc_wwan->if_mutex. However, this
mutex is not yet initialized by that point. Fix it by moving mutex_init
above the wwan_register_ops call. This also makes the order of
operations in ipc_wwan_init symmetric to ipc_wwan_deinit.

Fixes: 83068395bbfc ("net: iosm: create default link via WWAN core")
Signed-off-by: Maxim Mikityanskiy <maxtram95@gmail.com>
Reviewed-by: M Chetan Kumar <m.chetan.kumar@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wwan/iosm/iosm_ipc_wwan.c

index 2715114..4712f01 100644 (file)
@@ -323,15 +323,16 @@ struct iosm_wwan *ipc_wwan_init(struct iosm_imem *ipc_imem, struct device *dev)
        ipc_wwan->dev = dev;
        ipc_wwan->ipc_imem = ipc_imem;
 
+       mutex_init(&ipc_wwan->if_mutex);
+
        /* WWAN core will create a netdev for the default IP MUX channel */
        if (wwan_register_ops(ipc_wwan->dev, &iosm_wwan_ops, ipc_wwan,
                              IP_MUX_SESSION_DEFAULT)) {
+               mutex_destroy(&ipc_wwan->if_mutex);
                kfree(ipc_wwan);
                return NULL;
        }
 
-       mutex_init(&ipc_wwan->if_mutex);
-
        return ipc_wwan;
 }