summaryrefslogtreecommitdiff
path: root/fs/cifs/smb2misc.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2014-09-09 16:49:28 +0200
committerArnd Bergmann <arnd@arndb.de>2014-09-09 16:49:28 +0200
commit87e9d8fd26c782623b79f2968431179f29b339f2 (patch)
tree45e2cf70f4609ee82859d28dd8a34effc750a6c5 /fs/cifs/smb2misc.c
parentfacdb3dd378e81b8516a8faa061e0be56d2ae7be (diff)
parent75a41826e2c5dc1dc0fd5195fc29b031c97337af (diff)
Merge tag 'socfpga_update_for_v3.18' of git://git.rocketboards.org/linux-socfpga-next into next/dt
Pull "arm: dts: Add Altera SDRAM EDAC bindings & devicetree entries" From Dinh Nguyen: 5 of the 6 patches are DTS updates and the 1 patch is updating the MAINTAINERS entry with my new email address. Signed-off-by: Arnd Bergmann <arnd@arndb.de> * tag 'socfpga_update_for_v3.18' of git://git.rocketboards.org/linux-socfpga-next: arm: dts: Add Altera SDRAM EDAC bindings & devicetree entries. ARM: dts: socfpga: memreserve first 4KB for future system use ARM: dts: socfpga: Add SD card detect ARM: dts: socfpga: remove extra alias in the ArriaV devkit ARM: dts: socfpga: unuse the slot-node and deprecate the supports-highspeed for dw-mmc MAINTAINERS: update entries for ARM/SOCFPGA platform
Diffstat (limited to 'fs/cifs/smb2misc.c')
-rw-r--r--fs/cifs/smb2misc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
index f2e6ac29a8d6..4aa7a0f07d6e 100644
--- a/fs/cifs/smb2misc.c
+++ b/fs/cifs/smb2misc.c
@@ -178,9 +178,24 @@ smb2_check_message(char *buf, unsigned int length)
/* Windows 7 server returns 24 bytes more */
if (clc_len + 20 == len && command == SMB2_OPLOCK_BREAK_HE)
return 0;
- /* server can return one byte more */
+ /* server can return one byte more due to implied bcc[0] */
if (clc_len == 4 + len + 1)
return 0;
+
+ /*
+ * MacOS server pads after SMB2.1 write response with 3 bytes
+ * of junk. Other servers match RFC1001 len to actual
+ * SMB2/SMB3 frame length (header + smb2 response specific data)
+ * Log the server error (once), but allow it and continue
+ * since the frame is parseable.
+ */
+ if (clc_len < 4 /* RFC1001 header size */ + len) {
+ printk_once(KERN_WARNING
+ "SMB2 server sent bad RFC1001 len %d not %d\n",
+ len, clc_len - 4);
+ return 0;
+ }
+
return 1;
}
return 0;