vsock: fix missing cleanup when misc_register failed
reset transport and unlock if misc_register failed. Signed-off-by: Gao feng <omarapazanadi@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
10be15ff6c
commit
f6a835bb04
1 changed files with 4 additions and 3 deletions
|
@ -1948,13 +1948,13 @@ int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
|
||||||
err = misc_register(&vsock_device);
|
err = misc_register(&vsock_device);
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_err("Failed to register misc device\n");
|
pr_err("Failed to register misc device\n");
|
||||||
return -ENOENT;
|
goto err_reset_transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = proto_register(&vsock_proto, 1); /* we want our slab */
|
err = proto_register(&vsock_proto, 1); /* we want our slab */
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_err("Cannot register vsock protocol\n");
|
pr_err("Cannot register vsock protocol\n");
|
||||||
goto err_misc_deregister;
|
goto err_deregister_misc;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sock_register(&vsock_family_ops);
|
err = sock_register(&vsock_family_ops);
|
||||||
|
@ -1969,8 +1969,9 @@ int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
|
||||||
|
|
||||||
err_unregister_proto:
|
err_unregister_proto:
|
||||||
proto_unregister(&vsock_proto);
|
proto_unregister(&vsock_proto);
|
||||||
err_misc_deregister:
|
err_deregister_misc:
|
||||||
misc_deregister(&vsock_device);
|
misc_deregister(&vsock_device);
|
||||||
|
err_reset_transport:
|
||||||
transport = NULL;
|
transport = NULL;
|
||||||
err_busy:
|
err_busy:
|
||||||
mutex_unlock(&vsock_register_mutex);
|
mutex_unlock(&vsock_register_mutex);
|
||||||
|
|
Loading…
Add table
Reference in a new issue