|
@@ -1518,6 +1518,14 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
|
|
|
*nbytes = le16_to_cpu(pSMBr->CountHigh);
|
|
|
*nbytes = (*nbytes) << 16;
|
|
|
*nbytes += le16_to_cpu(pSMBr->Count);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Mask off high 16 bits when bytes written as returned by the
|
|
|
+ * server is greater than bytes requested by the client. Some
|
|
|
+ * OS/2 servers are known to set incorrect CountHigh values.
|
|
|
+ */
|
|
|
+ if (*nbytes > count)
|
|
|
+ *nbytes &= 0xFFFF;
|
|
|
}
|
|
|
|
|
|
cifs_buf_release(pSMB);
|
|
@@ -1606,6 +1614,14 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
|
|
|
*nbytes = le16_to_cpu(pSMBr->CountHigh);
|
|
|
*nbytes = (*nbytes) << 16;
|
|
|
*nbytes += le16_to_cpu(pSMBr->Count);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Mask off high 16 bits when bytes written as returned by the
|
|
|
+ * server is greater than bytes requested by the client. OS/2
|
|
|
+ * servers are known to set incorrect CountHigh values.
|
|
|
+ */
|
|
|
+ if (*nbytes > count)
|
|
|
+ *nbytes &= 0xFFFF;
|
|
|
}
|
|
|
|
|
|
/* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
|