Re: [PATCH] cifs: fix length checks in checkSMB (try #2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 28 Jan 2011 12:53:52 -0600
Steve French <smfrench@xxxxxxxxx> wrote:

> On Fri, Jan 28, 2011 at 6:24 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> > The cERROR message in checkSMB when the calculated length doesn't match
> > the RFC1001 length is incorrect in many cases. It always says that the
> > RFC1001 length is bigger than the SMB, even when it's actually the
> > reverse.
> >
> > Fix the error message to say the reverse of what it does now when the
> > SMB length goes beyond the end of the received data. Also, clarify the
> > error message when the RFC length is too big. Finally, clarify the
> > comments to show that the 512 byte limit on extra data at the end of
> > the packet is arbitrary.
> 
> Do we have any data to indicate that other servers send incorrect
> rfc1001 lengths larger than 512 bytes?  In eight years of test events, I
> have seen only a few responses (from Windows and NetApp IIRC) where the
> length was slightly too long.  The 512 byte was chosen because it
> was large enough to pass testing to all servers we had seen,
> allowing us to workaround problematic responses from real servers
> while still limiting the probability that "randomly generated" frames
> with incorrect lengths would pass validation checks and be
> processed.
> 

I'm not aware of any. My reason for proposing the patch to remove the
+512b limitation was simply that it didn't seem necessary to impose
such a limitation. The lengths all fit within what we had received so
ignoring any extra junk tacked on the end is harmless.

> If we have data on a byte range lock or find first response from Windows
> generating more than 512 bytes of junk then we should remove the
> check.
> 
> The theory proposed to explain why we see incorrect frame lengths
> from some servers was that due to rounding or due to RFC1001 length
> being calculated before it was determined whether the frame would return
> an smb error (e.g. access control error) error - the length could be off
> by up to sizeof of one t2 infolevel  Length could be off up to the sizeof of
> the fixed portion of one transact2 infolevel (all of which are less
> than 512 bytes)
> if the server e.g. decides to include one fewer findfirst entry in a response,
> or if a server fills in  t2 query file info data, then gets an access error,
> leaving the data, but adjusting the smb length, leaving the incorrect
> rfc1001 len.
> In all of the theorized and observed (at test events)
> cases, the server would never be off by more than sizeof largest transact2
> infolevel.
> 
> Also note that removing this check makes it harder for new server
> manufacturers to catch serious bugs in their products as the client
> no longer will do validity checking for them.  Speaking from past experience
> it is more painful to debug a server mixing up the wrong type of response
> for a request if validity checking is overly relaxed.
> 
> Does anyone have data on an existing server in the field that sends
> anything off by more than
> 512 bytes (the most I remember a server being off was about 100 or so bytes)
> in frame length?
> 

I give up. The latest patch (try #2) doesn't remove any checks. It just
clarifies the cERROR printk's and the comments.

-- 
Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux