[cifs:for-next 4/4] fs//cifs/smb2pdu.c:571:15: error: 'struct TCP_Server_Info' has no member named 'vol'

Steve French smfrench at gmail.com
Sun Sep 17 15:16:35 UTC 2017


Fixed - repushed to cifs-2.6.git for-next

On Sat, Sep 16, 2017 at 4:26 PM, kbuild test robot
<fengguang.wu at intel.com> wrote:
> tree:   git://git.samba.org/sfrench/cifs-2.6.git for-next
> head:   2ec9565c80e8669de38db875a9af6db6f6c418b7
> commit: 2ec9565c80e8669de38db875a9af6db6f6c418b7 [4/4] [SMB3] Add support for multidialect negotiate (SMB2.1 and later)
> config: xtensa-allyesconfig (attached as .config)
> compiler: xtensa-linux-gcc (GCC) 4.9.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         git checkout 2ec9565c80e8669de38db875a9af6db6f6c418b7
>         # save the attached .config to linux build tree
>         make.cross ARCH=xtensa
>
> All errors (new ones prefixed by >>):
>
>    fs//cifs/smb2pdu.c: In function 'SMB2_negotiate':
>>> fs//cifs/smb2pdu.c:571:15: error: 'struct TCP_Server_Info' has no member named 'vol'
>        ses->server->vol->ops = &smb21_operations;
>                   ^
>
> vim +571 fs//cifs/smb2pdu.c
>
>    451
>    452  /*
>    453   *
>    454   *      SMB2 Worker functions follow:
>    455   *
>    456   *      The general structure of the worker functions is:
>    457   *      1) Call smb2_init (assembles SMB2 header)
>    458   *      2) Initialize SMB2 command specific fields in fixed length area of SMB
>    459   *      3) Call smb_sendrcv2 (sends request on socket and waits for response)
>    460   *      4) Decode SMB2 command specific fields in the fixed length area
>    461   *      5) Decode variable length data area (if any for this SMB2 command type)
>    462   *      6) Call free smb buffer
>    463   *      7) return
>    464   *
>    465   */
>    466
>    467  int
>    468  SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)
>    469  {
>    470          struct smb2_negotiate_req *req;
>    471          struct smb2_negotiate_rsp *rsp;
>    472          struct kvec iov[1];
>    473          struct kvec rsp_iov;
>    474          int rc = 0;
>    475          int resp_buftype;
>    476          struct TCP_Server_Info *server = ses->server;
>    477          int blob_offset, blob_length;
>    478          char *security_blob;
>    479          int flags = CIFS_NEG_OP;
>    480
>    481          cifs_dbg(FYI, "Negotiate protocol\n");
>    482
>    483          if (!server) {
>    484                  WARN(1, "%s: server is NULL!\n", __func__);
>    485                  return -EIO;
>    486          }
>    487
>    488          rc = small_smb2_init(SMB2_NEGOTIATE, NULL, (void **) &req);
>    489          if (rc)
>    490                  return rc;
>    491
>    492          req->hdr.sync_hdr.SessionId = 0;
>    493
>    494          if (strcmp(ses->server->vals->version_string,
>    495                  SMB3ANY_VERSION_STRING) == 0) {
>    496                  req->Dialects[0] = cpu_to_le16(SMB30_PROT_ID);
>    497                  req->Dialects[1] = cpu_to_le16(SMB302_PROT_ID);
>    498                  req->DialectCount = cpu_to_le16(2);
>    499                  inc_rfc1001_len(req, 4);
>    500          } else if (strcmp(ses->server->vals->version_string,
>    501                  SMB3DEFAULT_VERSION_STRING) == 0) {
>    502                  req->Dialects[0] = cpu_to_le16(SMB21_PROT_ID);
>    503                  req->Dialects[1] = cpu_to_le16(SMB30_PROT_ID);
>    504                  req->Dialects[2] = cpu_to_le16(SMB302_PROT_ID);
>    505                  req->DialectCount = cpu_to_le16(3);
>    506                  inc_rfc1001_len(req, 6);
>    507          } else {
>    508                  /* otherwise send specific dialect */
>    509                  req->Dialects[0] = cpu_to_le16(ses->server->vals->protocol_id);
>    510                  req->DialectCount = cpu_to_le16(1);
>    511                  inc_rfc1001_len(req, 2);
>    512          }
>    513
>    514          /* only one of SMB2 signing flags may be set in SMB2 request */
>    515          if (ses->sign)
>    516                  req->SecurityMode = cpu_to_le16(SMB2_NEGOTIATE_SIGNING_REQUIRED);
>    517          else if (global_secflags & CIFSSEC_MAY_SIGN)
>    518                  req->SecurityMode = cpu_to_le16(SMB2_NEGOTIATE_SIGNING_ENABLED);
>    519          else
>    520                  req->SecurityMode = 0;
>    521
>    522          req->Capabilities = cpu_to_le32(ses->server->vals->req_capabilities);
>    523
>    524          /* ClientGUID must be zero for SMB2.02 dialect */
>    525          if (ses->server->vals->protocol_id == SMB20_PROT_ID)
>    526                  memset(req->ClientGUID, 0, SMB2_CLIENT_GUID_SIZE);
>    527          else {
>    528                  memcpy(req->ClientGUID, server->client_guid,
>    529                          SMB2_CLIENT_GUID_SIZE);
>    530                  if (ses->server->vals->protocol_id == SMB311_PROT_ID)
>    531                          assemble_neg_contexts(req);
>    532          }
>    533          iov[0].iov_base = (char *)req;
>    534          /* 4 for rfc1002 length field */
>    535          iov[0].iov_len = get_rfc1002_length(req) + 4;
>    536
>    537          rc = SendReceive2(xid, ses, iov, 1, &resp_buftype, flags, &rsp_iov);
>    538          cifs_small_buf_release(req);
>    539          rsp = (struct smb2_negotiate_rsp *)rsp_iov.iov_base;
>    540          /*
>    541           * No tcon so can't do
>    542           * cifs_stats_inc(&tcon->stats.smb2_stats.smb2_com_fail[SMB2...]);
>    543           */
>    544          if (rc == -EOPNOTSUPP) {
>    545                  cifs_dbg(VFS, "Dialect not supported by server. Consider "
>    546                          "specifying vers=1.0 or vers=2 on mount for accessing"
>    547                          " older servers\n");
>    548                  goto neg_exit;
>    549          } else if (rc != 0)
>    550                  goto neg_exit;
>    551
>    552          if (strcmp(ses->server->vals->version_string,
>    553                          SMB3ANY_VERSION_STRING) == 0) {
>    554                  if (rsp->DialectRevision == cpu_to_le16(SMB20_PROT_ID)) {
>    555                          cifs_dbg(VFS,
>    556                                  "SMB2 dialect returned but not requested\n");
>    557                          return -EIO;
>    558                  } else if (rsp->DialectRevision == cpu_to_le16(SMB21_PROT_ID)) {
>    559                          cifs_dbg(VFS,
>    560                                  "SMB2.1 dialect returned but not requested\n");
>    561                          return -EIO;
>    562                  }
>    563          } else if (strcmp(ses->server->vals->version_string,
>    564                          SMB3DEFAULT_VERSION_STRING) == 0) {
>    565                  if (rsp->DialectRevision == cpu_to_le16(SMB20_PROT_ID)) {
>    566                          cifs_dbg(VFS,
>    567                                  "SMB2 dialect returned but not requested\n");
>    568                          return -EIO;
>    569                  } else if (rsp->DialectRevision == cpu_to_le16(SMB21_PROT_ID)) {
>    570                          /* ops set to 3.0 by default for default so udpate */
>  > 571                          ses->server->vol->ops = &smb21_operations;
>    572                  }
>    573          }
>    574          /* BB add check that individually requested dialects match returned */
>    575
>    576          cifs_dbg(FYI, "mode 0x%x\n", rsp->SecurityMode);
>    577
>    578          if (rsp->DialectRevision == cpu_to_le16(SMB20_PROT_ID)) {
>    579                  cifs_dbg(FYI, "negotiated smb2.0 dialect\n");
>    580          } else if (rsp->DialectRevision == cpu_to_le16(SMB21_PROT_ID))
>    581                  cifs_dbg(FYI, "negotiated smb2.1 dialect\n");
>    582          else if (rsp->DialectRevision == cpu_to_le16(SMB30_PROT_ID))
>    583                  cifs_dbg(FYI, "negotiated smb3.0 dialect\n");
>    584          else if (rsp->DialectRevision == cpu_to_le16(SMB302_PROT_ID))
>    585                  cifs_dbg(FYI, "negotiated smb3.02 dialect\n");
>    586  #ifdef CONFIG_CIFS_SMB311
>    587          else if (rsp->DialectRevision == cpu_to_le16(SMB311_PROT_ID))
>    588                  cifs_dbg(FYI, "negotiated smb3.1.1 dialect\n");
>    589  #endif /* SMB311 */
>    590          else {
>    591                  cifs_dbg(VFS, "Illegal dialect returned by server 0x%x\n",
>    592                           le16_to_cpu(rsp->DialectRevision));
>    593                  rc = -EIO;
>    594                  goto neg_exit;
>    595          }
>    596          server->dialect = le16_to_cpu(rsp->DialectRevision);
>    597
>    598          /* BB: add check that dialect was valid given dialect(s) we asked for */
>    599
>    600          /* SMB2 only has an extended negflavor */
>    601          server->negflavor = CIFS_NEGFLAVOR_EXTENDED;
>    602          /* set it to the maximum buffer size value we can send with 1 credit */
>    603          server->maxBuf = min_t(unsigned int, le32_to_cpu(rsp->MaxTransactSize),
>    604                                 SMB2_MAX_BUFFER_SIZE);
>    605          server->max_read = le32_to_cpu(rsp->MaxReadSize);
>    606          server->max_write = le32_to_cpu(rsp->MaxWriteSize);
>    607          /* BB Do we need to validate the SecurityMode? */
>    608          server->sec_mode = le16_to_cpu(rsp->SecurityMode);
>    609          server->capabilities = le32_to_cpu(rsp->Capabilities);
>    610          /* Internal types */
>    611          server->capabilities |= SMB2_NT_FIND | SMB2_LARGE_FILES;
>    612
>    613          security_blob = smb2_get_data_area_len(&blob_offset, &blob_length,
>    614                                                 &rsp->hdr);
>    615          /*
>    616           * See MS-SMB2 section 2.2.4: if no blob, client picks default which
>    617           * for us will be
>    618           *      ses->sectype = RawNTLMSSP;
>    619           * but for time being this is our only auth choice so doesn't matter.
>    620           * We just found a server which sets blob length to zero expecting raw.
>    621           */
>    622          if (blob_length == 0) {
>    623                  cifs_dbg(FYI, "missing security blob on negprot\n");
>    624                  server->sec_ntlmssp = true;
>    625          }
>    626
>    627          rc = cifs_enable_signing(server, ses->sign);
>    628          if (rc)
>    629                  goto neg_exit;
>    630          if (blob_length) {
>    631                  rc = decode_negTokenInit(security_blob, blob_length, server);
>    632                  if (rc == 1)
>    633                          rc = 0;
>    634                  else if (rc == 0)
>    635                          rc = -EIO;
>    636          }
>    637  neg_exit:
>    638          free_rsp_buf(resp_buftype, rsp);
>    639          return rc;
>    640  }
>    641
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



-- 
Thanks,

Steve



More information about the samba-technical mailing list