Skip to content

Commit 193cc89

Browse files
author
Steve French
committed
cifs: fix potential null pointer use in destroy_workqueue in init_cifs error path
Dan Carpenter reported a Smack static checker warning: fs/smb/client/cifsfs.c:1981 init_cifs() error: we previously assumed 'serverclose_wq' could be null (see line 1895) The patch which introduced the serverclose workqueue used the wrong oredering in error paths in init_cifs() for freeing it on errors. Fixes: 173217b ("smb3: retrying on failed server close") Cc: stable@vger.kernel.org Cc: Ritvik Budhiraja <rbudhiraja@microsoft.com> Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Reviewed-by: David Howells <dhowell@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 33c9de2 commit 193cc89

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

fs/smb/client/cifsfs.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1894,12 +1894,12 @@ init_cifs(void)
18941894
WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
18951895
if (!serverclose_wq) {
18961896
rc = -ENOMEM;
1897-
goto out_destroy_serverclose_wq;
1897+
goto out_destroy_deferredclose_wq;
18981898
}
18991899

19001900
rc = cifs_init_inodecache();
19011901
if (rc)
1902-
goto out_destroy_deferredclose_wq;
1902+
goto out_destroy_serverclose_wq;
19031903

19041904
rc = cifs_init_netfs();
19051905
if (rc)
@@ -1967,6 +1967,8 @@ init_cifs(void)
19671967
cifs_destroy_netfs();
19681968
out_destroy_inodecache:
19691969
cifs_destroy_inodecache();
1970+
out_destroy_serverclose_wq:
1971+
destroy_workqueue(serverclose_wq);
19701972
out_destroy_deferredclose_wq:
19711973
destroy_workqueue(deferredclose_wq);
19721974
out_destroy_cifsoplockd_wq:
@@ -1977,8 +1979,6 @@ init_cifs(void)
19771979
destroy_workqueue(decrypt_wq);
19781980
out_destroy_cifsiod_wq:
19791981
destroy_workqueue(cifsiod_wq);
1980-
out_destroy_serverclose_wq:
1981-
destroy_workqueue(serverclose_wq);
19821982
out_clean_proc:
19831983
cifs_proc_clean();
19841984
return rc;

0 commit comments

Comments
 (0)