can: j1939: avoid possible use-after-free when j1939_can_rx_register fails
[sfrench/cifs-2.6.git] / net / can / j1939 / main.c
index 6ed79afe19a5f0e825b3b643dd47612422b4fa4a..ecff1c947d683b2f3e4eeff144f39a8f5ff5de1a 100644 (file)
@@ -290,16 +290,18 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
                return priv_new;
        }
        j1939_priv_set(ndev, priv);
-       mutex_unlock(&j1939_netdev_lock);
 
        ret = j1939_can_rx_register(priv);
        if (ret < 0)
                goto out_priv_put;
 
+       mutex_unlock(&j1939_netdev_lock);
        return priv;
 
  out_priv_put:
        j1939_priv_set(ndev, NULL);
+       mutex_unlock(&j1939_netdev_lock);
+
        dev_put(ndev);
        kfree(priv);