From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Suresh Jayaraman <sjayaraman@suse.de>,
Steve French <sfrench@us.ibm.com>
Subject: [04/17] cifs: Fix a kernel BUG with remote OS/2 server (try #3)
Date: Fri, 30 Jul 2010 09:57:20 -0700 [thread overview]
Message-ID: <20100730165954.210931660@clark.site> (raw)
In-Reply-To: <20100730170054.GA7736@kroah.com>
2.6.27-stable review patch. If anyone has any objections, please let us know.
------------------
From: Suresh Jayaraman <sjayaraman@suse.de>
commit 6513a81e9325d712f1bfb9a1d7b750134e49ff18 upstream.
While chasing a bug report involving a OS/2 server, I noticed the server sets
pSMBr->CountHigh to a incorrect value even in case of normal writes. This
results in 'nbytes' being computed wrongly and triggers a kernel BUG at
mm/filemap.c.
void iov_iter_advance(struct iov_iter *i, size_t bytes)
{
BUG_ON(i->count < bytes); <--- BUG here
Why the server is setting 'CountHigh' is not clear but only does so after
writing 64k bytes. Though this looks like the server bug, the client side
crash may not be acceptable.
The workaround is to mask off high 16 bits if the number of bytes written as
returned by the server is greater than the bytes requested by the client as
suggested by Jeff Layton.
Reviewed-by: Jeff Layton <jlayton@samba.org>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/cifs/cifssmb.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -1594,6 +1594,14 @@ CIFSSMBWrite(const int xid, struct cifsT
*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);
@@ -1679,6 +1687,14 @@ CIFSSMBWrite2(const int xid, struct cifs
*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 */
next prev parent reply other threads:[~2010-07-30 17:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-30 17:00 [00/17] 2.6.27.49-rc1 stable review Greg KH
2010-07-30 16:57 ` [01/17] hwmon: (coretemp) Properly label the sensors Greg KH
2010-07-30 16:57 ` [02/17] hwmon: (coretemp) Skip duplicate CPU entries Greg KH
2010-07-30 16:57 ` [03/17] cifs: remove bogus first_time check in NTLMv2 session setup code Greg KH
2010-07-30 16:57 ` Greg KH [this message]
2010-07-30 16:57 ` [05/17] cpmac: do not leak struct net_device on phy_connect errors Greg KH
2010-07-30 16:57 ` [06/17] sky2: enable rx/tx in sky2_phy_reinit() Greg KH
2010-07-30 16:57 ` [07/17] math-emu: correct test for downshifting fraction in _FP_FROM_INT() Greg KH
2010-07-30 16:57 ` [08/17] hostap: Protect against initialization interrupt Greg KH
2010-07-30 16:57 ` [09/17] netfilter: ip6t_REJECT: fix a dst leak in ipv6 REJECT Greg KH
2010-07-30 16:57 ` [10/17] SCSI: aacraid: Eliminate use after free Greg KH
2010-07-30 16:57 ` [11/17] amd64-agp: Probe unknown AGP devices the right way Greg KH
2010-07-30 16:57 ` [12/17] x86, Calgary: Increase max PHB number Greg KH
2010-07-30 16:57 ` [13/17] x86, Calgary: Limit the max PHB number to 256 Greg KH
2010-07-30 16:57 ` [14/17] IPoIB: Fix world-writable child interface control sysfs attributes Greg KH
2010-07-30 16:57 ` [15/17] bonding: select current active slave when enslaving device for mode tlb and alb Greg KH
2010-07-30 16:57 ` [16/17] kbuild: Fix modpost segfault Greg KH
2010-07-30 16:57 ` [17/17] ecryptfs: Bugfix for error related to ecryptfs_hash_buckets Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100730165954.210931660@clark.site \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=sfrench@us.ibm.com \
--cc=sjayaraman@suse.de \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome