Re: [PATCH 2/2] cifs: limit amount of data we request for xattrs to CIFSMaxBufSize

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

 



пн, 28 янв. 2019 г. в 18:57, Ronnie Sahlberg <lsahlber@xxxxxxxxxx>:
>
> minus the various headers and blobs that will be part of the reply.
>
> or else we might trigger a session reconnect.
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> ---
>  fs/cifs/smb2ops.c |  4 +++-
>  fs/cifs/smb2pdu.h | 15 +++++++++++++--
>  2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 34f621fe6dc0..a51c5d8b5888 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -905,7 +905,9 @@ smb2_query_eas(const unsigned int xid, struct cifs_tcon *tcon,
>                                       FILE_READ_EA,
>                                       FILE_FULL_EA_INFORMATION,
>                                       SMB2_O_INFO_FILE,
> -                                     SMB2_MAX_EA_BUF,
> +                                     CIFSMaxBufSize -
> +                                     MAX_SMB2_CREATE_RESPONSE_SIZE -
> +                                     MAX_SMB2_CLOSE_RESPONSE_SIZE,
>                                       &rsp_iov, &buftype, cifs_sb);
>         if (rc) {
>                 /*
> diff --git a/fs/cifs/smb2pdu.h b/fs/cifs/smb2pdu.h
> index 42381b0c4bd2..b9efb7e98903 100644
> --- a/fs/cifs/smb2pdu.h
> +++ b/fs/cifs/smb2pdu.h
> @@ -85,6 +85,7 @@
>  #define NUMBER_OF_SMB2_COMMANDS        0x0013
>
>  /* 52 transform hdr + 64 hdr + 88 create rsp */
> +#define SMB2_TRANSFORM_HEADER_SIZE 52

the comment above this line belongs to the line below.

>  #define MAX_SMB2_HDR_SIZE 204
>
>  #define SMB2_PROTO_NUMBER cpu_to_le32(0x424d53fe)
> @@ -648,6 +649,13 @@ struct smb2_create_req {
>         __u8   Buffer[0];
>  } __packed;
>
> +/*
> + * Maximum size of a SMB2_CREATE response is 64 (smb2 header) +
> + * 88 (fixed part of create response) + 520 (path) + 150 (contexts) +

Actually we may have only 3 create context responses (timewrap context
doesn't generate a response buffer):

struct create_lease_v2: 16 + 8 + 52 + 4 = 80
struct create_durable_v2: 16 + 8  = 24
struct create_posix: 16 + 16 + 8 = 40

resulting in 144 bytes for contexts. I don't mind to leave the numbers
as is because posix context is subject to change. Probably "150
(contexts) + 2 bytes of padding" can be changed to just "152
(contexts)"  for simplicity - up to you.

> + * 2 bytes of padding.
> + */
> +#define MAX_SMB2_CREATE_RESPONSE_SIZE 824
> +
>  struct smb2_create_rsp {
>         struct smb2_sync_hdr sync_hdr;
>         __le16 StructureSize;   /* Must be 89 */
> @@ -996,6 +1004,11 @@ struct smb2_close_req {
>         __u64  VolatileFileId; /* opaque endianness */
>  } __packed;
>
> +/*
> + * Maximum size of a SMB2_CLOSE response is 64 (smb2 header) + 60 (data)
> + */
> +#define MAX_SMB2_CLOSE_RESPONSE_SIZE 124
> +
>  struct smb2_close_rsp {
>         struct smb2_sync_hdr sync_hdr;
>         __le16 StructureSize; /* 60 */
> @@ -1398,8 +1411,6 @@ struct smb2_file_link_info { /* encoding of request for level 11 */
>         char   FileName[0];     /* Name to be assigned to new link */
>  } __packed; /* level 11 Set */
>
> -#define SMB2_MAX_EA_BUF 65536
> -
>  struct smb2_file_full_ea_info { /* encoding of response for level 15 */
>         __le32 next_entry_offset;
>         __u8   flags;
> --
> 2.13.6
>


--
Best regards,
Pavel Shilovsky




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

  Powered by Linux