diff mbox series

CIFS: fix max ea value size

Message ID 20190921112600.utzouyddp3cdmxhe@XZHOUW.usersys.redhat.com
State New
Headers show
Series CIFS: fix max ea value size | expand

Commit Message

Murphy Zhou Sept. 21, 2019, 11:26 a.m. UTC
It should not be larger then the slab max buf size. If user
specifies a larger size, it passes this check and goes
straightly to SMB2_set_info_init performing an insecure memcpy.

Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
---
 fs/cifs/xattr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Aurélien Aptel Sept. 21, 2019, 6:23 p.m. UTC | #1
"Murphy Zhou" <jencce.kernel@gmail.com> writes:
> It should not be larger then the slab max buf size. If user
> specifies a larger size, it passes this check and goes
> straightly to SMB2_set_info_init performing an insecure memcpy.

It's even smaller than that as CIFSMaxBufSize is the max size for the
whole packet IIRC. The EA payload needs to fit into that. So it should
be CIFSMaxBufSize-(largest SMB2 header size + Set EA initial
header). And if we set multiple EA at the same time it has to be divided
by the number of EAs etc...

Cheers,
Murphy Zhou Sept. 22, 2019, 1:25 a.m. UTC | #2
On Sat, Sep 21, 2019 at 08:23:32PM +0200, Aurélien Aptel wrote:
> "Murphy Zhou" <jencce.kernel@gmail.com> writes:
> > It should not be larger then the slab max buf size. If user
> > specifies a larger size, it passes this check and goes
> > straightly to SMB2_set_info_init performing an insecure memcpy.
> 
> It's even smaller than that as CIFSMaxBufSize is the max size for the
> whole packet IIRC. The EA payload needs to fit into that. So it should
> be CIFSMaxBufSize-(largest SMB2 header size + Set EA initial header).

No need. Slab size includes the bufzise and the header size.

> And if we set multiple EA at the same time it has to be divided
> by the number of EAs etc...

They will be handled separately and slab will work well.

> 
> Cheers,
> -- 
> Aurélien Aptel / SUSE Labs Samba Team
> GPG: 1839 CB5F 9F5B FB9B AA97  8C99 03C8 A49B 521B D5D3
> SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE
> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München)
Steve French Sept. 24, 2019, 5:24 a.m. UTC | #3
Your patch looks correct - added cc:stable and merged to cifs-2.6.git for-next

On Sun, Sep 22, 2019 at 2:23 PM Murphy Zhou <jencce.kernel@gmail.com> wrote:
>
> On Sat, Sep 21, 2019 at 08:23:32PM +0200, Aurélien Aptel wrote:
> > "Murphy Zhou" <jencce.kernel@gmail.com> writes:
> > > It should not be larger then the slab max buf size. If user
> > > specifies a larger size, it passes this check and goes
> > > straightly to SMB2_set_info_init performing an insecure memcpy.
> >
> > It's even smaller than that as CIFSMaxBufSize is the max size for the
> > whole packet IIRC. The EA payload needs to fit into that. So it should
> > be CIFSMaxBufSize-(largest SMB2 header size + Set EA initial header).
>
> No need. Slab size includes the bufzise and the header size.
>
> > And if we set multiple EA at the same time it has to be divided
> > by the number of EAs etc...
>
> They will be handled separately and slab will work well.
>
> >
> > Cheers,
> > --
> > Aurélien Aptel / SUSE Labs Samba Team
> > GPG: 1839 CB5F 9F5B FB9B AA97  8C99 03C8 A49B 521B D5D3
> > SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE
> > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München)
Aurélien Aptel Sept. 24, 2019, 9:16 p.m. UTC | #4
"Murphy Zhou" <jencce.kernel@gmail.com> writes:
> No need. Slab size includes the bufzise and the header size.
>
>> And if we set multiple EA at the same time it has to be divided
>> by the number of EAs etc...
>
> They will be handled separately and slab will work well.

Oh, you are right, I have no more remarks then.
We reviewed this with steve.

Thanks
diff mbox series

Patch

diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c
index 9076150758d8..db4ba8f6077e 100644
--- a/fs/cifs/xattr.c
+++ b/fs/cifs/xattr.c
@@ -31,7 +31,7 @@ 
 #include "cifs_fs_sb.h"
 #include "cifs_unicode.h"
 
-#define MAX_EA_VALUE_SIZE 65535
+#define MAX_EA_VALUE_SIZE CIFSMaxBufSize
 #define CIFS_XATTR_CIFS_ACL "system.cifs_acl"
 #define CIFS_XATTR_ATTRIB "cifs.dosattrib"  /* full name: user.cifs.dosattrib */
 #define CIFS_XATTR_CREATETIME "cifs.creationtime"  /* user.cifs.creationtime */