| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Date: Fri, 12 May 2017 17:59:32 +0200 |
| Subject: SMB2: Fix share type handling |
| |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| |
| |
| [ Upstream commit cd1230070ae1c12fd34cf6a557bfa81bf9311009 ] |
| |
| In fs/cifs/smb2pdu.h, we have: |
| #define SMB2_SHARE_TYPE_DISK 0x01 |
| #define SMB2_SHARE_TYPE_PIPE 0x02 |
| #define SMB2_SHARE_TYPE_PRINT 0x03 |
| |
| Knowing that, with the current code, the SMB2_SHARE_TYPE_PRINT case can |
| never trigger and printer share would be interpreted as disk share. |
| |
| So, test the ShareType value for equality instead. |
| |
| Fixes: faaf946a7d5b ("CIFS: Add tree connect/disconnect capability for SMB2") |
| Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Acked-by: Aurelien Aptel <aaptel@suse.com> |
| Signed-off-by: Steve French <smfrench@gmail.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/cifs/smb2pdu.c | 14 +++++++++----- |
| 1 file changed, 9 insertions(+), 5 deletions(-) |
| |
| --- a/fs/cifs/smb2pdu.c |
| +++ b/fs/cifs/smb2pdu.c |
| @@ -1151,15 +1151,19 @@ SMB2_tcon(const unsigned int xid, struct |
| goto tcon_exit; |
| } |
| |
| - if (rsp->ShareType & SMB2_SHARE_TYPE_DISK) |
| + switch (rsp->ShareType) { |
| + case SMB2_SHARE_TYPE_DISK: |
| cifs_dbg(FYI, "connection to disk share\n"); |
| - else if (rsp->ShareType & SMB2_SHARE_TYPE_PIPE) { |
| + break; |
| + case SMB2_SHARE_TYPE_PIPE: |
| tcon->ipc = true; |
| cifs_dbg(FYI, "connection to pipe share\n"); |
| - } else if (rsp->ShareType & SMB2_SHARE_TYPE_PRINT) { |
| - tcon->print = true; |
| + break; |
| + case SMB2_SHARE_TYPE_PRINT: |
| + tcon->ipc = true; |
| cifs_dbg(FYI, "connection to printer\n"); |
| - } else { |
| + break; |
| + default: |
| cifs_dbg(VFS, "unknown share type %d\n", rsp->ShareType); |
| rc = -EOPNOTSUPP; |
| goto tcon_error_exit; |