smb3: Fix rmdir compounding regression to strict servers
authorRonnie Sahlberg <lsahlber@redhat.com>
Tue, 18 Dec 2018 23:49:05 +0000 (17:49 -0600)
committerSteve French <stfrench@microsoft.com>
Wed, 19 Dec 2018 13:55:32 +0000 (07:55 -0600)
commit271b9c0c80076bb1dd868dc384ef3aac87ec7dec
tree020b815b1a0e8fb08e54888d495e82f5a4bfc8ce
parentddfbab46539f2d37a9e9d357b054486b51f7dc27
smb3: Fix rmdir compounding regression to strict servers

Some servers require that the setinfo matches the exact size,
and in this case compounding changes introduced by
commit c2e0fe3f5aae ("cifs: make rmdir() use compounding")
caused us to send 8 bytes (padded length) instead of 1 byte
(the size of the structure).  See MS-FSCC section 2.4.11.

Fixing this when we send a SET_INFO command for delete file
disposition, then ends up as an iov of a single byte but this
causes problems with SMB3 and encryption.

To avoid this, instead of creating a one byte iov for the disposition value
and then appending an additional iov with a 7 byte padding we now handle
this as a single 8 byte iov containing both the disposition byte as well as
the padding in one single buffer.

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Acked-by: Paulo Alcantara <palcantara@suse.de>
fs/cifs/smb2inode.c
fs/cifs/smb2ops.c
fs/cifs/smb2proto.h