mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
[CIFS] Fix check for tcon seal setting and fix oops on failed mount from earlier patch
set tcon->ses earlier If the inital tree connect fails, we'll end up calling cifs_put_smb_ses with a NULL pointer. Fix it by setting the tcon->ses earlier. Acked-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
c2b3382cd4
commit
ab3f992983
1 changed files with 4 additions and 3 deletions
|
@ -2270,16 +2270,18 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
||||||
cFYI(1, ("Found match on UNC path"));
|
cFYI(1, ("Found match on UNC path"));
|
||||||
/* existing tcon already has a reference */
|
/* existing tcon already has a reference */
|
||||||
cifs_put_smb_ses(pSesInfo);
|
cifs_put_smb_ses(pSesInfo);
|
||||||
|
if (tcon->seal != volume_info.seal)
|
||||||
|
cERROR(1, ("transport encryption setting "
|
||||||
|
"conflicts with existing tid"));
|
||||||
} else {
|
} else {
|
||||||
tcon = tconInfoAlloc();
|
tcon = tconInfoAlloc();
|
||||||
if (tcon == NULL) {
|
if (tcon == NULL) {
|
||||||
rc = -ENOMEM;
|
rc = -ENOMEM;
|
||||||
goto mount_fail_check;
|
goto mount_fail_check;
|
||||||
}
|
}
|
||||||
|
tcon->ses = pSesInfo;
|
||||||
|
|
||||||
/* check for null share name ie connect to dfs root */
|
/* check for null share name ie connect to dfs root */
|
||||||
|
|
||||||
/* BB check if works for exactly length 3 strings */
|
|
||||||
if ((strchr(volume_info.UNC + 3, '\\') == NULL)
|
if ((strchr(volume_info.UNC + 3, '\\') == NULL)
|
||||||
&& (strchr(volume_info.UNC + 3, '/') == NULL)) {
|
&& (strchr(volume_info.UNC + 3, '/') == NULL)) {
|
||||||
/* rc = connect_to_dfs_path(...) */
|
/* rc = connect_to_dfs_path(...) */
|
||||||
|
@ -2302,7 +2304,6 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
||||||
if (rc)
|
if (rc)
|
||||||
goto mount_fail_check;
|
goto mount_fail_check;
|
||||||
tcon->seal = volume_info.seal;
|
tcon->seal = volume_info.seal;
|
||||||
tcon->ses = pSesInfo;
|
|
||||||
write_lock(&cifs_tcp_ses_lock);
|
write_lock(&cifs_tcp_ses_lock);
|
||||||
list_add(&tcon->tcon_list, &pSesInfo->tcon_list);
|
list_add(&tcon->tcon_list, &pSesInfo->tcon_list);
|
||||||
write_unlock(&cifs_tcp_ses_lock);
|
write_unlock(&cifs_tcp_ses_lock);
|
||||||
|
|
Loading…
Reference in a new issue