reset transport and unlock if misc_register failed.
Signed-off-by: Gao feng <redacted>
---
net/vmw_vsock/af_vsock.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index df5fc6b..598e045 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1948,13 +1948,13 @@ int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
err = misc_register(&vsock_device);
if (err) {
pr_err("Failed to register misc device\n");
- return -ENOENT;
+ goto err_reset_transport;
}
err = proto_register(&vsock_proto, 1); /* we want our slab */
if (err) {
pr_err("Cannot register vsock protocol\n");
- goto err_misc_deregister;
+ goto err_deregister_misc;
}
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:
proto_unregister(&vsock_proto);
-err_misc_deregister:
+err_undegister_misc:
misc_deregister(&vsock_device);
+err_reset_transport:
transport = NULL;
err_busy:
mutex_unlock(&vsock_register_mutex);
--
2.4.3
Hi Gao,
[auto build test ERROR on net/master -- if it's inappropriate base, please suggest rules for selecting the more suitable base]
url: https://github.com/0day-ci/linux/commits/Gao-feng/vsock-fix-missing-cleanup-when-misc_register-failed/20151018-223056
config: x86_64-allmodconfig (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All error/warnings (new ones prefixed by >>):
net/vmw_vsock/af_vsock.c:1957:17: sparse: label 'err_deregister_misc' was not declared
net/vmw_vsock/af_vsock.c: In function '__vsock_core_init':quoted
net/vmw_vsock/af_vsock.c:1972:1: warning: label 'err_undegister_misc' defined but not used [-Wunused-label]
err_undegister_misc:
^quoted
net/vmw_vsock/af_vsock.c:1957:3: error: label 'err_deregister_misc' used but not defined
goto err_deregister_misc;
^
sparse warnings: (new ones prefixed by >>)
quoted
net/vmw_vsock/af_vsock.c:1957:17: sparse: label 'err_deregister_misc' was not declared
net/vmw_vsock/af_vsock.c: In function '__vsock_core_init':
net/vmw_vsock/af_vsock.c:1972:1: warning: label 'err_undegister_misc' defined but not used [-Wunused-label]
err_undegister_misc:
^
net/vmw_vsock/af_vsock.c:1957:3: error: label 'err_deregister_misc' used but not defined
goto err_deregister_misc;
^
vim +/err_deregister_misc +1957 net/vmw_vsock/af_vsock.c
1951 goto err_reset_transport;
1952 }
1953
1954 err = proto_register(&vsock_proto, 1); /* we want our slab */
1955 if (err) {
1956 pr_err("Cannot register vsock protocol\n");1957 goto err_deregister_misc;
1958 }
1959
1960 err = sock_register(&vsock_family_ops);
1961 if (err) {
1962 pr_err("could not register af_vsock (%d) address family: %d\n",
1963 AF_VSOCK, err);
1964 goto err_unregister_proto;
1965 }
1966
1967 mutex_unlock(&vsock_register_mutex);
1968 return 0;
1969
1970 err_unregister_proto:
1971 proto_unregister(&vsock_proto);1972 err_undegister_misc:
1973 misc_deregister(&vsock_device);
1974 err_reset_transport:
1975 transport = NULL;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation