[cifs:for-next 8/10] fs/cifs/smb2pdu.c:2580:19: warning: 'in_data_buf' may be used uninitialized in this function

kbuild test robot lkp at intel.com
Fri May 17 04:04:41 UTC 2019


tree:   git://git.samba.org/sfrench/cifs-2.6.git for-next
head:   dece44e381ab4a9fd1021db45ba4472e8c85becb
commit: 2c87d6a94d162e68ca393cb87719dae8737f55c0 [8/10] cifs: Allocate memory for all iovs in smb2_ioctl
config: openrisc-allmodconfig (attached as .config)
compiler: or1k-linux-gcc (GCC) 6.0.0 20160327 (experimental)
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 2c87d6a94d162e68ca393cb87719dae8737f55c0
        # save the attached .config to linux build tree
        make.cross ARCH=openrisc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   fs/cifs/smb2pdu.c: In function 'SMB2_ioctl_init':
>> fs/cifs/smb2pdu.c:2580:19: warning: 'in_data_buf' may be used uninitialized in this function [-Wmaybe-uninitialized]
      iov[1].iov_base = in_data_buf;
      ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~

vim +/in_data_buf +2580 fs/cifs/smb2pdu.c

  2530	
  2531	int
  2532	SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,
  2533			u64 persistent_fid, u64 volatile_fid, u32 opcode,
  2534			bool is_fsctl, char *in_data, u32 indatalen,
  2535			__u32 max_response_size)
  2536	{
  2537		struct smb2_ioctl_req *req;
  2538		struct kvec *iov = rqst->rq_iov;
  2539		unsigned int total_len;
  2540		int rc;
  2541		char *in_data_buf;
  2542	
  2543		rc = smb2_plain_req_init(SMB2_IOCTL, tcon, (void **) &req, &total_len);
  2544		if (rc)
  2545			return rc;
  2546	
  2547		if (indatalen) {
  2548			/*
  2549			 * indatalen is usually small at a couple of bytes max, so
  2550			 * just allocate through generic pool
  2551			 */
  2552			in_data_buf = kmalloc(indatalen, GFP_NOFS);
  2553			if (!in_data_buf) {
  2554				cifs_small_buf_release(req);
  2555				return -ENOMEM;
  2556			}
  2557			memcpy(in_data_buf, in_data, indatalen);
  2558		}
  2559	
  2560		req->CtlCode = cpu_to_le32(opcode);
  2561		req->PersistentFileId = persistent_fid;
  2562		req->VolatileFileId = volatile_fid;
  2563	
  2564		iov[0].iov_base = (char *)req;
  2565		/*
  2566		 * If no input data, the size of ioctl struct in
  2567		 * protocol spec still includes a 1 byte data buffer,
  2568		 * but if input data passed to ioctl, we do not
  2569		 * want to double count this, so we do not send
  2570		 * the dummy one byte of data in iovec[0] if sending
  2571		 * input data (in iovec[1]).
  2572		 */
  2573		if (indatalen) {
  2574			req->InputCount = cpu_to_le32(indatalen);
  2575			/* do not set InputOffset if no input data */
  2576			req->InputOffset =
  2577			       cpu_to_le32(offsetof(struct smb2_ioctl_req, Buffer));
  2578			rqst->rq_nvec = 2;
  2579			iov[0].iov_len = total_len - 1;
> 2580			iov[1].iov_base = in_data_buf;
  2581			iov[1].iov_len = indatalen;
  2582		} else {
  2583			rqst->rq_nvec = 1;
  2584			iov[0].iov_len = total_len;
  2585		}
  2586	
  2587		req->OutputOffset = 0;
  2588		req->OutputCount = 0; /* MBZ */
  2589	
  2590		/*
  2591		 * In most cases max_response_size is set to 16K (CIFSMaxBufSize)
  2592		 * We Could increase default MaxOutputResponse, but that could require
  2593		 * more credits. Windows typically sets this smaller, but for some
  2594		 * ioctls it may be useful to allow server to send more. No point
  2595		 * limiting what the server can send as long as fits in one credit
  2596		 * We can not handle more than CIFS_MAX_BUF_SIZE yet but may want
  2597		 * to increase this limit up in the future.
  2598		 * Note that for snapshot queries that servers like Azure expect that
  2599		 * the first query be minimal size (and just used to get the number/size
  2600		 * of previous versions) so response size must be specified as EXACTLY
  2601		 * sizeof(struct snapshot_array) which is 16 when rounded up to multiple
  2602		 * of eight bytes.  Currently that is the only case where we set max
  2603		 * response size smaller.
  2604		 */
  2605		req->MaxOutputResponse = cpu_to_le32(max_response_size);
  2606	
  2607		if (is_fsctl)
  2608			req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);
  2609		else
  2610			req->Flags = 0;
  2611	
  2612		/* validate negotiate request must be signed - see MS-SMB2 3.2.5.5 */
  2613		if (opcode == FSCTL_VALIDATE_NEGOTIATE_INFO)
  2614			req->sync_hdr.Flags |= SMB2_FLAGS_SIGNED;
  2615	
  2616		return 0;
  2617	}
  2618	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 48230 bytes
Desc: not available
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20190517/f902a77b/config.gz>


More information about the samba-technical mailing list