libcli/smb: allow unexpected padding in SMB2 IOCTL responses
authorStefan Metzmacher <metze@samba.org>
Thu, 14 Jan 2021 16:32:15 +0000 (17:32 +0100)
committerKarolin Seeger <kseeger@samba.org>
Mon, 18 Jan 2021 08:57:48 +0000 (08:57 +0000)
A NetApp Ontap 7.3.7 SMB server add 8 padding bytes to an
offset that's already 8 byte aligned.

RN: Work around special SMB2 IOCTL response behavior of NetApp Ontap 7.3.7
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14607

Pair-Programmed-With: Volker Lendecke <vl@samba.org>

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Fri Jan 15 08:36:34 UTC 2021 on sn-devel-184

(cherry picked from commit 4c6c71e1378401d66bf2ed230544a75f7b04376f)

Autobuild-User(v4-12-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-12-test): Mon Jan 18 08:57:48 UTC 2021 on sn-devel-184

libcli/smb/smb2cli_ioctl.c

index 6368bd31bc2bd3145f048a338f859927f3db63bc..f9abcc57bab39b7d2e69997b63832bfc3d4c765d 100644 (file)
@@ -191,8 +191,25 @@ static NTSTATUS smb2cli_ioctl_parse_buffer(uint32_t dyn_offset,
                return NT_STATUS_OK;
        }
 
+       if ((buffer_offset % 8) != 0) {
+               /*
+                * The offset needs to be 8 byte aligned.
+                */
+               return NT_STATUS_INVALID_NETWORK_RESPONSE;
+       }
+
+       /*
+        * We used to enforce buffer_offset to be
+        * an exact match of the expected minimum,
+        * but the NetApp Ontap 7.3.7 SMB server
+        * gets the padding wrong and aligns the
+        * input_buffer_offset by a value of 8.
+        *
+        * So we just enforce that the offset is
+        * not lower than the expected value.
+        */
        SMB_ASSERT(min_offset >= dyn_offset);
-       if (buffer_offset != min_offset) {
+       if (buffer_offset < min_offset) {
                return NT_STATUS_INVALID_NETWORK_RESPONSE;
        }