Loading fs/smb/server/smb2misc.c +12 −3 Original line number Diff line number Diff line Loading @@ -106,16 +106,25 @@ static int smb2_get_data_area_len(unsigned int *off, unsigned int *len, break; case SMB2_CREATE: { unsigned short int name_off = le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset); unsigned short int name_len = le16_to_cpu(((struct smb2_create_req *)hdr)->NameLength); if (((struct smb2_create_req *)hdr)->CreateContextsLength) { *off = le32_to_cpu(((struct smb2_create_req *) hdr)->CreateContextsOffset); *len = le32_to_cpu(((struct smb2_create_req *) hdr)->CreateContextsLength); if (!name_len) break; if (name_off + name_len < (u64)*off + *len) break; } *off = le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset); *len = le16_to_cpu(((struct smb2_create_req *)hdr)->NameLength); *off = name_off; *len = name_len; break; } case SMB2_QUERY_INFO: Loading Loading
fs/smb/server/smb2misc.c +12 −3 Original line number Diff line number Diff line Loading @@ -106,16 +106,25 @@ static int smb2_get_data_area_len(unsigned int *off, unsigned int *len, break; case SMB2_CREATE: { unsigned short int name_off = le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset); unsigned short int name_len = le16_to_cpu(((struct smb2_create_req *)hdr)->NameLength); if (((struct smb2_create_req *)hdr)->CreateContextsLength) { *off = le32_to_cpu(((struct smb2_create_req *) hdr)->CreateContextsOffset); *len = le32_to_cpu(((struct smb2_create_req *) hdr)->CreateContextsLength); if (!name_len) break; if (name_off + name_len < (u64)*off + *len) break; } *off = le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset); *len = le16_to_cpu(((struct smb2_create_req *)hdr)->NameLength); *off = name_off; *len = name_len; break; } case SMB2_QUERY_INFO: Loading