All of lore.kernel.org
 help / color / mirror / Atom feed
* fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?
@ 2026-02-03  1:50 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-02-03  1:50 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: ChenXiaoSong <chenxiaosong@kylinos.cn>
CC: Steve French <stfrench@microsoft.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   dee65f79364c18033cabdf0728c7e7025405cf40
commit: c5b462e35373a68a5a7954f5e00383998cc7fe92 smb/server: fix return value of smb2_read()
date:   9 weeks ago
:::::: branch date: 8 hours ago
:::::: commit date: 9 weeks ago
config: powerpc64-randconfig-r072-20260203 (https://download.01.org/0day-ci/archive/20260203/202602030949.zoZekmRw-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 9b8addffa70cee5b2acc5454712d9cf78ce45710)
smatch version: v0.5.0-8994-gd50c5a4c

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202602030949.zoZekmRw-lkp@intel.com/

smatch warnings:
fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?

vim +6835 fs/smb/server/smb2pdu.c

e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6712  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6713  /**
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6714   * smb2_read() - handler for smb2 read from file
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6715   * @work:	smb work containing read command buffer
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6716   *
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6717   * Return:	0 on success, otherwise error
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6718   */
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6719  int smb2_read(struct ksmbd_work *work)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6720  {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6721  	struct ksmbd_conn *conn = work->conn;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6722  	struct smb2_read_req *req;
cb4517201b8acd fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-11-03  6723  	struct smb2_read_rsp *rsp;
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6724  	struct ksmbd_file *fp = NULL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6725  	loff_t offset;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6726  	size_t length, mincount;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6727  	ssize_t nbytes = 0, remain_bytes = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6728  	int err = 0;
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6729  	bool is_rdma_channel = false;
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6730  	unsigned int max_read_size = conn->vals->max_read_size;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6731  	unsigned int id = KSMBD_NO_FID, pid = KSMBD_NO_FID;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6732  	void *aux_payload_buf;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6733  
e333e77638b3cc fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6734  	ksmbd_debug(SMB, "Received smb2 read request\n");
e333e77638b3cc fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6735  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6736  	if (test_share_config_flag(work->tcon->share_conf,
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6737  				   KSMBD_SHARE_FLAG_PIPE)) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6738  		ksmbd_debug(SMB, "IPC pipe read request\n");
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6739  		return smb2_read_pipe(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6740  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6741  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6742  	if (work->next_smb2_rcv_hdr_off) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6743  		req = ksmbd_req_buf_next(work);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6744  		rsp = ksmbd_resp_buf_next(work);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6745  		if (!has_file_id(req->VolatileFileId)) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6746  			ksmbd_debug(SMB, "Compound request set FID = %llu\n",
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6747  					work->compound_fid);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6748  			id = work->compound_fid;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6749  			pid = work->compound_pfid;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6750  		}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6751  	} else {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6752  		req = smb2_get_msg(work->request_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6753  		rsp = smb2_get_msg(work->response_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6754  	}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6755  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6756  	if (!has_file_id(id)) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6757  		id = req->VolatileFileId;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6758  		pid = req->PersistentFileId;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6759  	}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6760  
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6761  	if (req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE ||
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6762  	    req->Channel == SMB2_CHANNEL_RDMA_V1) {
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6763  		is_rdma_channel = true;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6764  		max_read_size = get_smbd_max_read_write_size(work->conn->transport);
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6765  		if (max_read_size == 0) {
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6766  			err = -EINVAL;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6767  			goto out;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6768  		}
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6769  	}
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6770  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6771  	if (is_rdma_channel == true) {
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6772  		unsigned int ch_offset = le16_to_cpu(req->ReadChannelInfoOffset);
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6773  
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6774  		if (ch_offset < offsetof(struct smb2_read_req, Buffer)) {
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6775  			err = -EINVAL;
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6776  			goto out;
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6777  		}
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6778  		err = smb2_set_remote_key_for_rdma(work,
e7de2c4521ce86 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-06  6779  						   (struct smbdirect_buffer_descriptor_v1 *)
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6780  						   ((char *)req + ch_offset),
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6781  						   req->Channel,
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6782  						   req->ReadChannelInfoLength);
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6783  		if (err)
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6784  			goto out;
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6785  	}
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6786  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6787  	fp = ksmbd_lookup_fd_slow(work, id, pid);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6788  	if (!fp) {
a4382db9bac314 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6789  		err = -ENOENT;
a4382db9bac314 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6790  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6791  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6792  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6793  	if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_READ_ATTRIBUTES_LE))) {
bde1694aecdb53 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  6794  		pr_err("Not permitted to read : 0x%x\n", fp->daccess);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6795  		err = -EACCES;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6796  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6797  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6798  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6799  	offset = le64_to_cpu(req->Offset);
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6800  	if (offset < 0) {
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6801  		err = -EINVAL;
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6802  		goto out;
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6803  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6804  	length = le32_to_cpu(req->Length);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6805  	mincount = le32_to_cpu(req->MinimumCount);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6806  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6807  	if (length > max_read_size) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6808  		ksmbd_debug(SMB, "limiting read size to max size(%u)\n",
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6809  			    max_read_size);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6810  		err = -EINVAL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6811  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6812  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6813  
369c1634cc7ae8 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6814  	ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
369c1634cc7ae8 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6815  		    fp->filp, offset, length);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6816  
06a025448b572c fs/smb/server/smb2pdu.c Norbert Szetei    2024-11-30  6817  	aux_payload_buf = kvzalloc(ALIGN(length, 8), KSMBD_DEFAULT_GFP);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6818  	if (!aux_payload_buf) {
c1ea111fd1bb4c fs/cifsd/smb2pdu.c      Dan Carpenter     2021-03-22  6819  		err = -ENOMEM;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6820  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6821  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6822  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6823  	nbytes = ksmbd_vfs_read(work, fp, length, &offset, aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6824  	if (nbytes < 0) {
6fced056d2cc8d fs/smb/server/smb2pdu.c ZhangGuoDong      2025-10-12  6825  		kvfree(aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6826  		err = nbytes;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6827  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6828  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6829  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6830  	if ((nbytes == 0 && length != 0) || nbytes < mincount) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6831  		kvfree(aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6832  		rsp->hdr.Status = STATUS_END_OF_FILE;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6833  		smb2_set_err_rsp(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6834  		ksmbd_fd_put(work, fp);
c5b462e35373a6 fs/smb/server/smb2pdu.c ChenXiaoSong      2025-10-17 @6835  		return -ENODATA;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6836  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6837  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6838  	ksmbd_debug(SMB, "nbytes %zu, offset %lld mincount %zu\n",
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6839  		    nbytes, offset, mincount);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6840  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6841  	if (is_rdma_channel == true) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6842  		/* write data to the client using rdma channel */
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6843  		remain_bytes = smb2_read_rdma_channel(work, req,
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6844  						      aux_payload_buf,
070fb21e5912b6 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-26  6845  						      nbytes);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6846  		kvfree(aux_payload_buf);
59d8d24f461033 fs/smb/server/smb2pdu.c Namjae Jeon       2023-09-12  6847  		aux_payload_buf = NULL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6848  		nbytes = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6849  		if (remain_bytes < 0) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6850  			err = (int)remain_bytes;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6851  			goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6852  		}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6853  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6854  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6855  	rsp->StructureSize = cpu_to_le16(17);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6856  	rsp->DataOffset = 80;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6857  	rsp->Reserved = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6858  	rsp->DataLength = cpu_to_le32(nbytes);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6859  	rsp->DataRemaining = cpu_to_le32(remain_bytes);
699230f31bf55a fs/ksmbd/smb2pdu.c      Ronnie Sahlberg   2021-09-09  6860  	rsp->Flags = 0;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6861  	err = ksmbd_iov_pin_rsp_read(work, (void *)rsp,
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6862  				     offsetof(struct smb2_read_rsp, Buffer),
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6863  				     aux_payload_buf, nbytes);
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6864  	if (err) {
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6865  		kvfree(aux_payload_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6866  		goto out;
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6867  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6868  	ksmbd_fd_put(work, fp);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6869  	return 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6870  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6871  out:
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6872  	if (err) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6873  		if (err == -EISDIR)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6874  			rsp->hdr.Status = STATUS_INVALID_DEVICE_REQUEST;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6875  		else if (err == -EAGAIN)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6876  			rsp->hdr.Status = STATUS_FILE_LOCK_CONFLICT;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6877  		else if (err == -ENOENT)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6878  			rsp->hdr.Status = STATUS_FILE_CLOSED;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6879  		else if (err == -EACCES)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6880  			rsp->hdr.Status = STATUS_ACCESS_DENIED;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6881  		else if (err == -ESHARE)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6882  			rsp->hdr.Status = STATUS_SHARING_VIOLATION;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6883  		else if (err == -EINVAL)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6884  			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6885  		else
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6886  			rsp->hdr.Status = STATUS_INVALID_HANDLE;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6887  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6888  		smb2_set_err_rsp(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6889  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6890  	ksmbd_fd_put(work, fp);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6891  	return err;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6892  }
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6893  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 3+ messages in thread
* fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?
@ 2026-05-16 18:50 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-05-16 18:50 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: ChenXiaoSong <chenxiaosong@kylinos.cn>
CC: Steve French <stfrench@microsoft.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   6916d5703ddf9a38f1f6c2cc793381a24ee914c6
commit: c5b462e35373a68a5a7954f5e00383998cc7fe92 smb/server: fix return value of smb2_read()
date:   6 months ago
:::::: branch date: 19 hours ago
:::::: commit date: 6 months ago
config: loongarch-randconfig-r072-20260516 (https://download.01.org/0day-ci/archive/20260517/202605170214.uVLvXFA9-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
smatch: v0.5.0-9185-gbcc58b9c

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: c5b462e35373 ("smb/server: fix return value of smb2_read()")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202605170214.uVLvXFA9-lkp@intel.com/

smatch warnings:
fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?

vim +6835 fs/smb/server/smb2pdu.c

e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6712  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6713  /**
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6714   * smb2_read() - handler for smb2 read from file
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6715   * @work:	smb work containing read command buffer
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6716   *
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6717   * Return:	0 on success, otherwise error
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6718   */
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6719  int smb2_read(struct ksmbd_work *work)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6720  {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6721  	struct ksmbd_conn *conn = work->conn;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6722  	struct smb2_read_req *req;
cb4517201b8acd fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-11-03  6723  	struct smb2_read_rsp *rsp;
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6724  	struct ksmbd_file *fp = NULL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6725  	loff_t offset;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6726  	size_t length, mincount;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6727  	ssize_t nbytes = 0, remain_bytes = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6728  	int err = 0;
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6729  	bool is_rdma_channel = false;
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6730  	unsigned int max_read_size = conn->vals->max_read_size;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6731  	unsigned int id = KSMBD_NO_FID, pid = KSMBD_NO_FID;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6732  	void *aux_payload_buf;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6733  
e333e77638b3cc fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6734  	ksmbd_debug(SMB, "Received smb2 read request\n");
e333e77638b3cc fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6735  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6736  	if (test_share_config_flag(work->tcon->share_conf,
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6737  				   KSMBD_SHARE_FLAG_PIPE)) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6738  		ksmbd_debug(SMB, "IPC pipe read request\n");
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6739  		return smb2_read_pipe(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6740  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6741  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6742  	if (work->next_smb2_rcv_hdr_off) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6743  		req = ksmbd_req_buf_next(work);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6744  		rsp = ksmbd_resp_buf_next(work);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6745  		if (!has_file_id(req->VolatileFileId)) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6746  			ksmbd_debug(SMB, "Compound request set FID = %llu\n",
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6747  					work->compound_fid);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6748  			id = work->compound_fid;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6749  			pid = work->compound_pfid;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6750  		}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6751  	} else {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6752  		req = smb2_get_msg(work->request_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6753  		rsp = smb2_get_msg(work->response_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6754  	}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6755  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6756  	if (!has_file_id(id)) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6757  		id = req->VolatileFileId;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6758  		pid = req->PersistentFileId;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6759  	}
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6760  
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6761  	if (req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE ||
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6762  	    req->Channel == SMB2_CHANNEL_RDMA_V1) {
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6763  		is_rdma_channel = true;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6764  		max_read_size = get_smbd_max_read_write_size(work->conn->transport);
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6765  		if (max_read_size == 0) {
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6766  			err = -EINVAL;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6767  			goto out;
03a38d846750f0 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6768  		}
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6769  	}
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6770  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6771  	if (is_rdma_channel == true) {
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6772  		unsigned int ch_offset = le16_to_cpu(req->ReadChannelInfoOffset);
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6773  
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6774  		if (ch_offset < offsetof(struct smb2_read_req, Buffer)) {
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6775  			err = -EINVAL;
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6776  			goto out;
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6777  		}
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6778  		err = smb2_set_remote_key_for_rdma(work,
e7de2c4521ce86 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-06  6779  						   (struct smbdirect_buffer_descriptor_v1 *)
6d896d3b44cf64 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6780  						   ((char *)req + ch_offset),
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6781  						   req->Channel,
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6782  						   req->ReadChannelInfoLength);
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6783  		if (err)
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6784  			goto out;
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6785  	}
2fd5dcb1c8ef96 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6786  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6787  	fp = ksmbd_lookup_fd_slow(work, id, pid);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6788  	if (!fp) {
a4382db9bac314 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6789  		err = -ENOENT;
a4382db9bac314 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6790  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6791  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6792  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6793  	if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_READ_ATTRIBUTES_LE))) {
bde1694aecdb53 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  6794  		pr_err("Not permitted to read : 0x%x\n", fp->daccess);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6795  		err = -EACCES;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6796  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6797  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6798  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6799  	offset = le64_to_cpu(req->Offset);
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6800  	if (offset < 0) {
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6801  		err = -EINVAL;
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6802  		goto out;
fc342cf86e2dc4 fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6803  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6804  	length = le32_to_cpu(req->Length);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6805  	mincount = le32_to_cpu(req->MinimumCount);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6806  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6807  	if (length > max_read_size) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6808  		ksmbd_debug(SMB, "limiting read size to max size(%u)\n",
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6809  			    max_read_size);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6810  		err = -EINVAL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6811  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6812  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6813  
369c1634cc7ae8 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6814  	ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
369c1634cc7ae8 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6815  		    fp->filp, offset, length);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6816  
06a025448b572c fs/smb/server/smb2pdu.c Norbert Szetei    2024-11-30  6817  	aux_payload_buf = kvzalloc(ALIGN(length, 8), KSMBD_DEFAULT_GFP);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6818  	if (!aux_payload_buf) {
c1ea111fd1bb4c fs/cifsd/smb2pdu.c      Dan Carpenter     2021-03-22  6819  		err = -ENOMEM;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6820  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6821  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6822  
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6823  	nbytes = ksmbd_vfs_read(work, fp, length, &offset, aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6824  	if (nbytes < 0) {
6fced056d2cc8d fs/smb/server/smb2pdu.c ZhangGuoDong      2025-10-12  6825  		kvfree(aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6826  		err = nbytes;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6827  		goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6828  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6829  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6830  	if ((nbytes == 0 && length != 0) || nbytes < mincount) {
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6831  		kvfree(aux_payload_buf);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6832  		rsp->hdr.Status = STATUS_END_OF_FILE;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6833  		smb2_set_err_rsp(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6834  		ksmbd_fd_put(work, fp);
c5b462e35373a6 fs/smb/server/smb2pdu.c ChenXiaoSong      2025-10-17 @6835  		return -ENODATA;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6836  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6837  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6838  	ksmbd_debug(SMB, "nbytes %zu, offset %lld mincount %zu\n",
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6839  		    nbytes, offset, mincount);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6840  
7a84399e1ce3f5 fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6841  	if (is_rdma_channel == true) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6842  		/* write data to the client using rdma channel */
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6843  		remain_bytes = smb2_read_rdma_channel(work, req,
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6844  						      aux_payload_buf,
070fb21e5912b6 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-26  6845  						      nbytes);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6846  		kvfree(aux_payload_buf);
59d8d24f461033 fs/smb/server/smb2pdu.c Namjae Jeon       2023-09-12  6847  		aux_payload_buf = NULL;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6848  		nbytes = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6849  		if (remain_bytes < 0) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6850  			err = (int)remain_bytes;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6851  			goto out;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6852  		}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6853  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6854  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6855  	rsp->StructureSize = cpu_to_le16(17);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6856  	rsp->DataOffset = 80;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6857  	rsp->Reserved = 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6858  	rsp->DataLength = cpu_to_le32(nbytes);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6859  	rsp->DataRemaining = cpu_to_le32(remain_bytes);
699230f31bf55a fs/ksmbd/smb2pdu.c      Ronnie Sahlberg   2021-09-09  6860  	rsp->Flags = 0;
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6861  	err = ksmbd_iov_pin_rsp_read(work, (void *)rsp,
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6862  				     offsetof(struct smb2_read_rsp, Buffer),
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6863  				     aux_payload_buf, nbytes);
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6864  	if (err) {
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6865  		kvfree(aux_payload_buf);
e2b76ab8b5c932 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6866  		goto out;
108a020c64434f fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6867  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6868  	ksmbd_fd_put(work, fp);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6869  	return 0;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6870  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6871  out:
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6872  	if (err) {
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6873  		if (err == -EISDIR)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6874  			rsp->hdr.Status = STATUS_INVALID_DEVICE_REQUEST;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6875  		else if (err == -EAGAIN)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6876  			rsp->hdr.Status = STATUS_FILE_LOCK_CONFLICT;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6877  		else if (err == -ENOENT)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6878  			rsp->hdr.Status = STATUS_FILE_CLOSED;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6879  		else if (err == -EACCES)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6880  			rsp->hdr.Status = STATUS_ACCESS_DENIED;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6881  		else if (err == -ESHARE)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6882  			rsp->hdr.Status = STATUS_SHARING_VIOLATION;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6883  		else if (err == -EINVAL)
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6884  			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6885  		else
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6886  			rsp->hdr.Status = STATUS_INVALID_HANDLE;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6887  
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6888  		smb2_set_err_rsp(work);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6889  	}
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6890  	ksmbd_fd_put(work, fp);
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6891  	return err;
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6892  }
e2f34481b24db2 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6893  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 3+ messages in thread
* fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?
@ 2026-08-25 15:17 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-08-25 15:17 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: ChenXiaoSong <chenxiaosong@kylinos.cn>
CC: Steve French <stfrench@microsoft.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   66498c75b4f8017f62d720d9b59675bdf3abce91
commit: c5b462e35373a68a5a7954f5e00383998cc7fe92 smb/server: fix return value of smb2_read()
date:   9 months ago
:::::: branch date: 20 hours ago
:::::: commit date: 9 months ago
config: microblaze-randconfig-r072-20260825 (https://download.01.org/0day-ci/archive/20260825/202608252306.MO3PfGRx-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 13.4.0
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: c5b462e35373 ("smb/server: fix return value of smb2_read()")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202608252306.MO3PfGRx-lkp@intel.com/

smatch warnings:
fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto?

vim +6835 fs/smb/server/smb2pdu.c

e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6712  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6713  /**
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6714   * smb2_read() - handler for smb2 read from file
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6715   * @work:	smb work containing read command buffer
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6716   *
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6717   * Return:	0 on success, otherwise error
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6718   */
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6719  int smb2_read(struct ksmbd_work *work)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6720  {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6721  	struct ksmbd_conn *conn = work->conn;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6722  	struct smb2_read_req *req;
cb4517201b8acdb fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-11-03  6723  	struct smb2_read_rsp *rsp;
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6724  	struct ksmbd_file *fp = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6725  	loff_t offset;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6726  	size_t length, mincount;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6727  	ssize_t nbytes = 0, remain_bytes = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6728  	int err = 0;
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6729  	bool is_rdma_channel = false;
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6730  	unsigned int max_read_size = conn->vals->max_read_size;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6731  	unsigned int id = KSMBD_NO_FID, pid = KSMBD_NO_FID;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6732  	void *aux_payload_buf;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6733  
e333e77638b3cc8 fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6734  	ksmbd_debug(SMB, "Received smb2 read request\n");
e333e77638b3cc8 fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  6735  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6736  	if (test_share_config_flag(work->tcon->share_conf,
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6737  				   KSMBD_SHARE_FLAG_PIPE)) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6738  		ksmbd_debug(SMB, "IPC pipe read request\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6739  		return smb2_read_pipe(work);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6740  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6741  
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6742  	if (work->next_smb2_rcv_hdr_off) {
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6743  		req = ksmbd_req_buf_next(work);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6744  		rsp = ksmbd_resp_buf_next(work);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6745  		if (!has_file_id(req->VolatileFileId)) {
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6746  			ksmbd_debug(SMB, "Compound request set FID = %llu\n",
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6747  					work->compound_fid);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6748  			id = work->compound_fid;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6749  			pid = work->compound_pfid;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6750  		}
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6751  	} else {
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6752  		req = smb2_get_msg(work->request_buf);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6753  		rsp = smb2_get_msg(work->response_buf);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6754  	}
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6755  
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6756  	if (!has_file_id(id)) {
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6757  		id = req->VolatileFileId;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6758  		pid = req->PersistentFileId;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6759  	}
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6760  
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6761  	if (req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE ||
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6762  	    req->Channel == SMB2_CHANNEL_RDMA_V1) {
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6763  		is_rdma_channel = true;
03a38d846750f06 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6764  		max_read_size = get_smbd_max_read_write_size(work->conn->transport);
03a38d846750f06 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6765  		if (max_read_size == 0) {
03a38d846750f06 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6766  			err = -EINVAL;
03a38d846750f06 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6767  			goto out;
03a38d846750f06 fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-15  6768  		}
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6769  	}
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6770  
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6771  	if (is_rdma_channel == true) {
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6772  		unsigned int ch_offset = le16_to_cpu(req->ReadChannelInfoOffset);
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6773  
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6774  		if (ch_offset < offsetof(struct smb2_read_req, Buffer)) {
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6775  			err = -EINVAL;
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6776  			goto out;
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6777  		}
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6778  		err = smb2_set_remote_key_for_rdma(work,
e7de2c4521ce86e fs/smb/server/smb2pdu.c Stefan Metzmacher 2025-08-06  6779  						   (struct smbdirect_buffer_descriptor_v1 *)
6d896d3b44cf64a fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-20  6780  						   ((char *)req + ch_offset),
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6781  						   req->Channel,
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6782  						   req->ReadChannelInfoLength);
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6783  		if (err)
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6784  			goto out;
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6785  	}
2fd5dcb1c8ef96c fs/ksmbd/smb2pdu.c      Hyunchul Lee      2022-01-13  6786  
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6787  	fp = ksmbd_lookup_fd_slow(work, id, pid);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6788  	if (!fp) {
a4382db9bac3144 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6789  		err = -ENOENT;
a4382db9bac3144 fs/cifsd/smb2pdu.c      Marios Makassikis 2021-05-06  6790  		goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6791  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6792  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6793  	if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_READ_ATTRIBUTES_LE))) {
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  6794  		pr_err("Not permitted to read : 0x%x\n", fp->daccess);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6795  		err = -EACCES;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6796  		goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6797  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6798  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6799  	offset = le64_to_cpu(req->Offset);
fc342cf86e2dc4d fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6800  	if (offset < 0) {
fc342cf86e2dc4d fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6801  		err = -EINVAL;
fc342cf86e2dc4d fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6802  		goto out;
fc342cf86e2dc4d fs/smb/server/smb2pdu.c Jordy Zomer       2024-11-28  6803  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6804  	length = le32_to_cpu(req->Length);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6805  	mincount = le32_to_cpu(req->MinimumCount);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6806  
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6807  	if (length > max_read_size) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6808  		ksmbd_debug(SMB, "limiting read size to max size(%u)\n",
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6809  			    max_read_size);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6810  		err = -EINVAL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6811  		goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6812  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6813  
369c1634cc7ae86 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6814  	ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
369c1634cc7ae86 fs/ksmbd/smb2pdu.c      Al Viro           2022-01-30  6815  		    fp->filp, offset, length);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6816  
06a025448b572c3 fs/smb/server/smb2pdu.c Norbert Szetei    2024-11-30  6817  	aux_payload_buf = kvzalloc(ALIGN(length, 8), KSMBD_DEFAULT_GFP);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6818  	if (!aux_payload_buf) {
c1ea111fd1bb4c4 fs/cifsd/smb2pdu.c      Dan Carpenter     2021-03-22  6819  		err = -ENOMEM;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6820  		goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6821  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6822  
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6823  	nbytes = ksmbd_vfs_read(work, fp, length, &offset, aux_payload_buf);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6824  	if (nbytes < 0) {
6fced056d2cc8d0 fs/smb/server/smb2pdu.c ZhangGuoDong      2025-10-12  6825  		kvfree(aux_payload_buf);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6826  		err = nbytes;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6827  		goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6828  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6829  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6830  	if ((nbytes == 0 && length != 0) || nbytes < mincount) {
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6831  		kvfree(aux_payload_buf);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6832  		rsp->hdr.Status = STATUS_END_OF_FILE;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6833  		smb2_set_err_rsp(work);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6834  		ksmbd_fd_put(work, fp);
c5b462e35373a68 fs/smb/server/smb2pdu.c ChenXiaoSong      2025-10-17 @6835  		return -ENODATA;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6836  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6837  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6838  	ksmbd_debug(SMB, "nbytes %zu, offset %lld mincount %zu\n",
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6839  		    nbytes, offset, mincount);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6840  
7a84399e1ce3f5f fs/ksmbd/smb2pdu.c      Namjae Jeon       2022-05-16  6841  	if (is_rdma_channel == true) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6842  		/* write data to the client using rdma channel */
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6843  		remain_bytes = smb2_read_rdma_channel(work, req,
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6844  						      aux_payload_buf,
070fb21e5912b6a fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-26  6845  						      nbytes);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6846  		kvfree(aux_payload_buf);
59d8d24f4610333 fs/smb/server/smb2pdu.c Namjae Jeon       2023-09-12  6847  		aux_payload_buf = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6848  		nbytes = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6849  		if (remain_bytes < 0) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6850  			err = (int)remain_bytes;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6851  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6852  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6853  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6854  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6855  	rsp->StructureSize = cpu_to_le16(17);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6856  	rsp->DataOffset = 80;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6857  	rsp->Reserved = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6858  	rsp->DataLength = cpu_to_le32(nbytes);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6859  	rsp->DataRemaining = cpu_to_le32(remain_bytes);
699230f31bf55ab fs/ksmbd/smb2pdu.c      Ronnie Sahlberg   2021-09-09  6860  	rsp->Flags = 0;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6861  	err = ksmbd_iov_pin_rsp_read(work, (void *)rsp,
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6862  				     offsetof(struct smb2_read_rsp, Buffer),
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6863  				     aux_payload_buf, nbytes);
108a020c64434fe fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6864  	if (err) {
108a020c64434fe fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6865  		kvfree(aux_payload_buf);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  6866  		goto out;
108a020c64434fe fs/smb/server/smb2pdu.c Fedor Pchelkin    2024-02-05  6867  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6868  	ksmbd_fd_put(work, fp);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6869  	return 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6870  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6871  out:
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6872  	if (err) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6873  		if (err == -EISDIR)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6874  			rsp->hdr.Status = STATUS_INVALID_DEVICE_REQUEST;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6875  		else if (err == -EAGAIN)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6876  			rsp->hdr.Status = STATUS_FILE_LOCK_CONFLICT;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6877  		else if (err == -ENOENT)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6878  			rsp->hdr.Status = STATUS_FILE_CLOSED;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6879  		else if (err == -EACCES)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6880  			rsp->hdr.Status = STATUS_ACCESS_DENIED;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6881  		else if (err == -ESHARE)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6882  			rsp->hdr.Status = STATUS_SHARING_VIOLATION;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6883  		else if (err == -EINVAL)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6884  			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6885  		else
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6886  			rsp->hdr.Status = STATUS_INVALID_HANDLE;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6887  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6888  		smb2_set_err_rsp(work);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6889  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6890  	ksmbd_fd_put(work, fp);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6891  	return err;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6892  }
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  6893  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-25 15:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-03  1:50 fs/smb/server/smb2pdu.c:6835 smb2_read() warn: missing unwind goto? kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2026-05-16 18:50 kernel test robot
2026-08-25 15:17 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.