All of lore.kernel.org
 help / color / mirror / Atom feed
* [hare-scsi-devel:scsi-result-rework 8/146] drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
@ 2021-04-22  0:29 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-04-22  0:29 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 13465 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Hannes Reinecke <hare@suse.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git scsi-result-rework
head:   19720ea7b22b443a182646eef7edc36e32e7b515
commit: 650e66d86e623824cc550f1b8411951116a6b6ea [8/146] scsi: Kill DRIVER_SENSE
:::::: branch date: 9 hours ago
:::::: commit date: 2 days ago
config: i386-randconfig-m021-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
drivers/scsi/sg.c:579 sg_new_read() warn: this array is probably non-NULL. 'srp->sense_b'

Old smatch warnings:
drivers/scsi/sg.c:484 sg_read() error: we previously assumed 'srp' could be null (see line 470)
drivers/scsi/sg.c:1100 sg_ioctl_common() warn: inconsistent indenting

vim +501 drivers/scsi/sg.c

78ed001d9e7106 Arnd Bergmann   2019-12-04  439  
^1da177e4c3f41 Linus Torvalds  2005-04-16  440  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  441  sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
^1da177e4c3f41 Linus Torvalds  2005-04-16  442  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  443  	Sg_device *sdp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  444  	Sg_fd *sfp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  445  	Sg_request *srp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  446  	int req_pack_id = -1;
^1da177e4c3f41 Linus Torvalds  2005-04-16  447  	sg_io_hdr_t *hp;
78ed001d9e7106 Arnd Bergmann   2019-12-04  448  	struct sg_header *old_hdr;
78ed001d9e7106 Arnd Bergmann   2019-12-04  449  	int retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  450  
26b5b874aff565 Jann Horn       2018-06-25  451  	/*
26b5b874aff565 Jann Horn       2018-06-25  452  	 * This could cause a response to be stranded. Close the associated
26b5b874aff565 Jann Horn       2018-06-25  453  	 * file descriptor to free up any resources being held.
26b5b874aff565 Jann Horn       2018-06-25  454  	 */
26b5b874aff565 Jann Horn       2018-06-25  455  	retval = sg_check_file_access(filp, __func__);
26b5b874aff565 Jann Horn       2018-06-25  456  	if (retval)
26b5b874aff565 Jann Horn       2018-06-25  457  		return retval;
26b5b874aff565 Jann Horn       2018-06-25  458  
^1da177e4c3f41 Linus Torvalds  2005-04-16  459  	if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
^1da177e4c3f41 Linus Torvalds  2005-04-16  460  		return -ENXIO;
95e159d6dd808b Hannes Reinecke 2014-06-25  461  	SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
95e159d6dd808b Hannes Reinecke 2014-06-25  462  				      "sg_read: count=%d\n", (int) count));
d6b10348f93979 Mike Christie   2005-11-08  463  
78ed001d9e7106 Arnd Bergmann   2019-12-04  464  	if (sfp->force_packid)
78ed001d9e7106 Arnd Bergmann   2019-12-04  465  		retval = get_sg_io_pack_id(&req_pack_id, buf, count);
78ed001d9e7106 Arnd Bergmann   2019-12-04  466  	if (retval)
78ed001d9e7106 Arnd Bergmann   2019-12-04  467  		return retval;
78ed001d9e7106 Arnd Bergmann   2019-12-04  468  
^1da177e4c3f41 Linus Torvalds  2005-04-16  469  	srp = sg_get_rq_mark(sfp, req_pack_id);
^1da177e4c3f41 Linus Torvalds  2005-04-16  470  	if (!srp) {		/* now wait on packet to arrive */
78ed001d9e7106 Arnd Bergmann   2019-12-04  471  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  472  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  473  		if (filp->f_flags & O_NONBLOCK)
78ed001d9e7106 Arnd Bergmann   2019-12-04  474  			return -EAGAIN;
3f0c6aba0b65a6 Jörn Engel      2012-04-12  475  		retval = wait_event_interruptible(sfp->read_wait,
cc833acbee9db5 Douglas Gilbert 2014-06-25  476  			(atomic_read(&sdp->detaching) ||
3f0c6aba0b65a6 Jörn Engel      2012-04-12  477  			(srp = sg_get_rq_mark(sfp, req_pack_id))));
78ed001d9e7106 Arnd Bergmann   2019-12-04  478  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  479  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  480  		if (retval)
cb59e840838193 Douglas Gilbert 2005-04-02  481  			/* -ERESTARTSYS as signal hit process */
78ed001d9e7106 Arnd Bergmann   2019-12-04  482  			return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  483  	}
78ed001d9e7106 Arnd Bergmann   2019-12-04  484  	if (srp->header.interface_id != '\0')
78ed001d9e7106 Arnd Bergmann   2019-12-04  485  		return sg_new_read(sfp, buf, count, srp);
^1da177e4c3f41 Linus Torvalds  2005-04-16  486  
^1da177e4c3f41 Linus Torvalds  2005-04-16  487  	hp = &srp->header;
78ed001d9e7106 Arnd Bergmann   2019-12-04  488  	old_hdr = kzalloc(SZ_SG_HEADER, GFP_KERNEL);
78ed001d9e7106 Arnd Bergmann   2019-12-04  489  	if (!old_hdr)
78ed001d9e7106 Arnd Bergmann   2019-12-04  490  		return -ENOMEM;
78ed001d9e7106 Arnd Bergmann   2019-12-04  491  
cb59e840838193 Douglas Gilbert 2005-04-02  492  	old_hdr->reply_len = (int) hp->timeout;
cb59e840838193 Douglas Gilbert 2005-04-02  493  	old_hdr->pack_len = old_hdr->reply_len; /* old, strange behaviour */
cb59e840838193 Douglas Gilbert 2005-04-02  494  	old_hdr->pack_id = hp->pack_id;
cb59e840838193 Douglas Gilbert 2005-04-02  495  	old_hdr->twelve_byte =
^1da177e4c3f41 Linus Torvalds  2005-04-16  496  	    ((srp->data.cmd_opcode >= 0xc0) && (12 == hp->cmd_len)) ? 1 : 0;
cb59e840838193 Douglas Gilbert 2005-04-02  497  	old_hdr->target_status = hp->masked_status;
cb59e840838193 Douglas Gilbert 2005-04-02  498  	old_hdr->host_status = hp->host_status;
cb59e840838193 Douglas Gilbert 2005-04-02  499  	old_hdr->driver_status = hp->driver_status;
^1da177e4c3f41 Linus Torvalds  2005-04-16  500  	if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @501  	    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
650e66d86e6238 Hannes Reinecke 2019-10-21  502  		old_hdr->driver_status |= DRIVER_SENSE;
cb59e840838193 Douglas Gilbert 2005-04-02  503  		memcpy(old_hdr->sense_buffer, srp->sense_b,
cb59e840838193 Douglas Gilbert 2005-04-02  504  		       sizeof (old_hdr->sense_buffer));
650e66d86e6238 Hannes Reinecke 2019-10-21  505  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  506  	switch (hp->host_status) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  507  	/* This setup of 'result' is for backward compatibility and is best
^1da177e4c3f41 Linus Torvalds  2005-04-16  508  	   ignored by the user who should use target, host + driver status */
^1da177e4c3f41 Linus Torvalds  2005-04-16  509  	case DID_OK:
^1da177e4c3f41 Linus Torvalds  2005-04-16  510  	case DID_PASSTHROUGH:
^1da177e4c3f41 Linus Torvalds  2005-04-16  511  	case DID_SOFT_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  512  		old_hdr->result = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  513  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  514  	case DID_NO_CONNECT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  515  	case DID_BUS_BUSY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  516  	case DID_TIME_OUT:
cb59e840838193 Douglas Gilbert 2005-04-02  517  		old_hdr->result = EBUSY;
^1da177e4c3f41 Linus Torvalds  2005-04-16  518  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  519  	case DID_BAD_TARGET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  520  	case DID_ABORT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  521  	case DID_PARITY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  522  	case DID_RESET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  523  	case DID_BAD_INTR:
cb59e840838193 Douglas Gilbert 2005-04-02  524  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  525  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  526  	case DID_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  527  		old_hdr->result = (srp->sense_b[0] == 0 && 
^1da177e4c3f41 Linus Torvalds  2005-04-16  528  				  hp->masked_status == GOOD) ? 0 : EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  529  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  530  	default:
cb59e840838193 Douglas Gilbert 2005-04-02  531  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  532  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  533  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  534  
^1da177e4c3f41 Linus Torvalds  2005-04-16  535  	/* Now copy the result back to the user buffer.  */
^1da177e4c3f41 Linus Torvalds  2005-04-16  536  	if (count >= SZ_SG_HEADER) {
c8c12792d5fe11 Al Viro         2019-10-17  537  		if (copy_to_user(buf, old_hdr, SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  538  			retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  539  			goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  540  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  541  		buf += SZ_SG_HEADER;
cb59e840838193 Douglas Gilbert 2005-04-02  542  		if (count > old_hdr->reply_len)
cb59e840838193 Douglas Gilbert 2005-04-02  543  			count = old_hdr->reply_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  544  		if (count > SZ_SG_HEADER) {
cb59e840838193 Douglas Gilbert 2005-04-02  545  			if (sg_read_oxfer(srp, buf, count - SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  546  				retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  547  				goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  548  			}
^1da177e4c3f41 Linus Torvalds  2005-04-16  549  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  550  	} else
cb59e840838193 Douglas Gilbert 2005-04-02  551  		count = (old_hdr->result == 0) ? 0 : -EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  552  	sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  553  	sg_remove_request(sfp, srp);
cb59e840838193 Douglas Gilbert 2005-04-02  554  	retval = count;
cb59e840838193 Douglas Gilbert 2005-04-02  555  free_old_hdr:
cb59e840838193 Douglas Gilbert 2005-04-02  556  	kfree(old_hdr);
cb59e840838193 Douglas Gilbert 2005-04-02  557  	return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  558  }
^1da177e4c3f41 Linus Torvalds  2005-04-16  559  
^1da177e4c3f41 Linus Torvalds  2005-04-16  560  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  561  sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
^1da177e4c3f41 Linus Torvalds  2005-04-16  562  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  563  	sg_io_hdr_t *hp = &srp->header;
3b524a683af899 Tony Battersby  2015-02-11  564  	int err = 0, err2;
^1da177e4c3f41 Linus Torvalds  2005-04-16  565  	int len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  566  
78ed001d9e7106 Arnd Bergmann   2019-12-04  567  	if (in_compat_syscall()) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  568  		if (count < sizeof(struct compat_sg_io_hdr)) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  569  			err = -EINVAL;
78ed001d9e7106 Arnd Bergmann   2019-12-04  570  			goto err_out;
78ed001d9e7106 Arnd Bergmann   2019-12-04  571  		}
78ed001d9e7106 Arnd Bergmann   2019-12-04  572  	} else if (count < SZ_SG_IO_HDR) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  573  		err = -EINVAL;
^1da177e4c3f41 Linus Torvalds  2005-04-16  574  		goto err_out;
^1da177e4c3f41 Linus Torvalds  2005-04-16  575  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  576  	hp->sb_len_wr = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  577  	if ((hp->mx_sb_len > 0) && hp->sbp) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  578  		if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @579  		    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
d6b10348f93979 Mike Christie   2005-11-08  580  			int sb_len = SCSI_SENSE_BUFFERSIZE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  581  			sb_len = (hp->mx_sb_len > sb_len) ? sb_len : hp->mx_sb_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  582  			len = 8 + (int) srp->sense_b[7];	/* Additional sense length field */
^1da177e4c3f41 Linus Torvalds  2005-04-16  583  			len = (len > sb_len) ? sb_len : len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  584  			if (copy_to_user(hp->sbp, srp->sense_b, len)) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  585  				err = -EFAULT;
^1da177e4c3f41 Linus Torvalds  2005-04-16  586  				goto err_out;
650e66d86e6238 Hannes Reinecke 2019-10-21  587  			} else
650e66d86e6238 Hannes Reinecke 2019-10-21  588  				hp->driver_status |= DRIVER_SENSE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  589  			hp->sb_len_wr = len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  590  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  591  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  592  	if (hp->masked_status || hp->host_status || hp->driver_status)
^1da177e4c3f41 Linus Torvalds  2005-04-16  593  		hp->info |= SG_INFO_CHECK;
98aaaec4a150c3 Arnd Bergmann   2019-03-14  594  	err = put_sg_io_hdr(hp, buf);
^1da177e4c3f41 Linus Torvalds  2005-04-16  595  err_out:
3b524a683af899 Tony Battersby  2015-02-11  596  	err2 = sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  597  	sg_remove_request(sfp, srp);
3b524a683af899 Tony Battersby  2015-02-11  598  	return err ? : err2 ? : count;
^1da177e4c3f41 Linus Torvalds  2005-04-16  599  }
^1da177e4c3f41 Linus Torvalds  2005-04-16  600  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33217 bytes --]

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

* [hare-scsi-devel:scsi-result-rework 8/146] drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
@ 2021-04-23  9:39 ` Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2021-04-23  9:39 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 13414 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git scsi-result-rework
head:   19720ea7b22b443a182646eef7edc36e32e7b515
commit: 650e66d86e623824cc550f1b8411951116a6b6ea [8/146] scsi: Kill DRIVER_SENSE
config: i386-randconfig-m021-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
drivers/scsi/sg.c:579 sg_new_read() warn: this array is probably non-NULL. 'srp->sense_b'

Old smatch warnings:
drivers/scsi/sg.c:484 sg_read() error: we previously assumed 'srp' could be null (see line 470)
drivers/scsi/sg.c:1100 sg_ioctl_common() warn: inconsistent indenting

vim +501 drivers/scsi/sg.c

^1da177e4c3f41 Linus Torvalds  2005-04-16  440  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  441  sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
^1da177e4c3f41 Linus Torvalds  2005-04-16  442  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  443  	Sg_device *sdp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  444  	Sg_fd *sfp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  445  	Sg_request *srp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  446  	int req_pack_id = -1;
^1da177e4c3f41 Linus Torvalds  2005-04-16  447  	sg_io_hdr_t *hp;
78ed001d9e7106 Arnd Bergmann   2019-12-04  448  	struct sg_header *old_hdr;
78ed001d9e7106 Arnd Bergmann   2019-12-04  449  	int retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  450  
26b5b874aff565 Jann Horn       2018-06-25  451  	/*
26b5b874aff565 Jann Horn       2018-06-25  452  	 * This could cause a response to be stranded. Close the associated
26b5b874aff565 Jann Horn       2018-06-25  453  	 * file descriptor to free up any resources being held.
26b5b874aff565 Jann Horn       2018-06-25  454  	 */
26b5b874aff565 Jann Horn       2018-06-25  455  	retval = sg_check_file_access(filp, __func__);
26b5b874aff565 Jann Horn       2018-06-25  456  	if (retval)
26b5b874aff565 Jann Horn       2018-06-25  457  		return retval;
26b5b874aff565 Jann Horn       2018-06-25  458  
^1da177e4c3f41 Linus Torvalds  2005-04-16  459  	if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
^1da177e4c3f41 Linus Torvalds  2005-04-16  460  		return -ENXIO;
95e159d6dd808b Hannes Reinecke 2014-06-25  461  	SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
95e159d6dd808b Hannes Reinecke 2014-06-25  462  				      "sg_read: count=%d\n", (int) count));
d6b10348f93979 Mike Christie   2005-11-08  463  
78ed001d9e7106 Arnd Bergmann   2019-12-04  464  	if (sfp->force_packid)
78ed001d9e7106 Arnd Bergmann   2019-12-04  465  		retval = get_sg_io_pack_id(&req_pack_id, buf, count);
78ed001d9e7106 Arnd Bergmann   2019-12-04  466  	if (retval)
78ed001d9e7106 Arnd Bergmann   2019-12-04  467  		return retval;
78ed001d9e7106 Arnd Bergmann   2019-12-04  468  
^1da177e4c3f41 Linus Torvalds  2005-04-16  469  	srp = sg_get_rq_mark(sfp, req_pack_id);
^1da177e4c3f41 Linus Torvalds  2005-04-16  470  	if (!srp) {		/* now wait on packet to arrive */
78ed001d9e7106 Arnd Bergmann   2019-12-04  471  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  472  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  473  		if (filp->f_flags & O_NONBLOCK)
78ed001d9e7106 Arnd Bergmann   2019-12-04  474  			return -EAGAIN;
3f0c6aba0b65a6 Jörn Engel      2012-04-12  475  		retval = wait_event_interruptible(sfp->read_wait,
cc833acbee9db5 Douglas Gilbert 2014-06-25  476  			(atomic_read(&sdp->detaching) ||
3f0c6aba0b65a6 Jörn Engel      2012-04-12  477  			(srp = sg_get_rq_mark(sfp, req_pack_id))));
78ed001d9e7106 Arnd Bergmann   2019-12-04  478  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  479  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  480  		if (retval)
cb59e840838193 Douglas Gilbert 2005-04-02  481  			/* -ERESTARTSYS as signal hit process */
78ed001d9e7106 Arnd Bergmann   2019-12-04  482  			return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  483  	}
78ed001d9e7106 Arnd Bergmann   2019-12-04  484  	if (srp->header.interface_id != '\0')
78ed001d9e7106 Arnd Bergmann   2019-12-04  485  		return sg_new_read(sfp, buf, count, srp);
^1da177e4c3f41 Linus Torvalds  2005-04-16  486  
^1da177e4c3f41 Linus Torvalds  2005-04-16  487  	hp = &srp->header;
78ed001d9e7106 Arnd Bergmann   2019-12-04  488  	old_hdr = kzalloc(SZ_SG_HEADER, GFP_KERNEL);
78ed001d9e7106 Arnd Bergmann   2019-12-04  489  	if (!old_hdr)
78ed001d9e7106 Arnd Bergmann   2019-12-04  490  		return -ENOMEM;
78ed001d9e7106 Arnd Bergmann   2019-12-04  491  
cb59e840838193 Douglas Gilbert 2005-04-02  492  	old_hdr->reply_len = (int) hp->timeout;
cb59e840838193 Douglas Gilbert 2005-04-02  493  	old_hdr->pack_len = old_hdr->reply_len; /* old, strange behaviour */
cb59e840838193 Douglas Gilbert 2005-04-02  494  	old_hdr->pack_id = hp->pack_id;
cb59e840838193 Douglas Gilbert 2005-04-02  495  	old_hdr->twelve_byte =
^1da177e4c3f41 Linus Torvalds  2005-04-16  496  	    ((srp->data.cmd_opcode >= 0xc0) && (12 == hp->cmd_len)) ? 1 : 0;
cb59e840838193 Douglas Gilbert 2005-04-02  497  	old_hdr->target_status = hp->masked_status;
cb59e840838193 Douglas Gilbert 2005-04-02  498  	old_hdr->host_status = hp->host_status;
cb59e840838193 Douglas Gilbert 2005-04-02  499  	old_hdr->driver_status = hp->driver_status;
^1da177e4c3f41 Linus Torvalds  2005-04-16  500  	if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @501  	    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
                                                             ^^^^^^^^^^^^
This can't be NULL.

650e66d86e6238 Hannes Reinecke 2019-10-21  502  		old_hdr->driver_status |= DRIVER_SENSE;
cb59e840838193 Douglas Gilbert 2005-04-02  503  		memcpy(old_hdr->sense_buffer, srp->sense_b,
cb59e840838193 Douglas Gilbert 2005-04-02  504  		       sizeof (old_hdr->sense_buffer));
650e66d86e6238 Hannes Reinecke 2019-10-21  505  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  506  	switch (hp->host_status) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  507  	/* This setup of 'result' is for backward compatibility and is best
^1da177e4c3f41 Linus Torvalds  2005-04-16  508  	   ignored by the user who should use target, host + driver status */
^1da177e4c3f41 Linus Torvalds  2005-04-16  509  	case DID_OK:
^1da177e4c3f41 Linus Torvalds  2005-04-16  510  	case DID_PASSTHROUGH:
^1da177e4c3f41 Linus Torvalds  2005-04-16  511  	case DID_SOFT_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  512  		old_hdr->result = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  513  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  514  	case DID_NO_CONNECT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  515  	case DID_BUS_BUSY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  516  	case DID_TIME_OUT:
cb59e840838193 Douglas Gilbert 2005-04-02  517  		old_hdr->result = EBUSY;
^1da177e4c3f41 Linus Torvalds  2005-04-16  518  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  519  	case DID_BAD_TARGET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  520  	case DID_ABORT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  521  	case DID_PARITY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  522  	case DID_RESET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  523  	case DID_BAD_INTR:
cb59e840838193 Douglas Gilbert 2005-04-02  524  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  525  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  526  	case DID_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  527  		old_hdr->result = (srp->sense_b[0] == 0 && 
^1da177e4c3f41 Linus Torvalds  2005-04-16  528  				  hp->masked_status == GOOD) ? 0 : EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  529  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  530  	default:
cb59e840838193 Douglas Gilbert 2005-04-02  531  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  532  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  533  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  534  
^1da177e4c3f41 Linus Torvalds  2005-04-16  535  	/* Now copy the result back to the user buffer.  */
^1da177e4c3f41 Linus Torvalds  2005-04-16  536  	if (count >= SZ_SG_HEADER) {
c8c12792d5fe11 Al Viro         2019-10-17  537  		if (copy_to_user(buf, old_hdr, SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  538  			retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  539  			goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  540  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  541  		buf += SZ_SG_HEADER;
cb59e840838193 Douglas Gilbert 2005-04-02  542  		if (count > old_hdr->reply_len)
cb59e840838193 Douglas Gilbert 2005-04-02  543  			count = old_hdr->reply_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  544  		if (count > SZ_SG_HEADER) {
cb59e840838193 Douglas Gilbert 2005-04-02  545  			if (sg_read_oxfer(srp, buf, count - SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  546  				retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  547  				goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  548  			}
^1da177e4c3f41 Linus Torvalds  2005-04-16  549  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  550  	} else
cb59e840838193 Douglas Gilbert 2005-04-02  551  		count = (old_hdr->result == 0) ? 0 : -EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  552  	sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  553  	sg_remove_request(sfp, srp);
cb59e840838193 Douglas Gilbert 2005-04-02  554  	retval = count;
cb59e840838193 Douglas Gilbert 2005-04-02  555  free_old_hdr:
cb59e840838193 Douglas Gilbert 2005-04-02  556  	kfree(old_hdr);
cb59e840838193 Douglas Gilbert 2005-04-02  557  	return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  558  }
^1da177e4c3f41 Linus Torvalds  2005-04-16  559  
^1da177e4c3f41 Linus Torvalds  2005-04-16  560  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  561  sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
^1da177e4c3f41 Linus Torvalds  2005-04-16  562  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  563  	sg_io_hdr_t *hp = &srp->header;
3b524a683af899 Tony Battersby  2015-02-11  564  	int err = 0, err2;
^1da177e4c3f41 Linus Torvalds  2005-04-16  565  	int len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  566  
78ed001d9e7106 Arnd Bergmann   2019-12-04  567  	if (in_compat_syscall()) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  568  		if (count < sizeof(struct compat_sg_io_hdr)) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  569  			err = -EINVAL;
78ed001d9e7106 Arnd Bergmann   2019-12-04  570  			goto err_out;
78ed001d9e7106 Arnd Bergmann   2019-12-04  571  		}
78ed001d9e7106 Arnd Bergmann   2019-12-04  572  	} else if (count < SZ_SG_IO_HDR) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  573  		err = -EINVAL;
^1da177e4c3f41 Linus Torvalds  2005-04-16  574  		goto err_out;
^1da177e4c3f41 Linus Torvalds  2005-04-16  575  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  576  	hp->sb_len_wr = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  577  	if ((hp->mx_sb_len > 0) && hp->sbp) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  578  		if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @579  		    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
                                                                     ^^^^^^^^^^^^

d6b10348f93979 Mike Christie   2005-11-08  580  			int sb_len = SCSI_SENSE_BUFFERSIZE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  581  			sb_len = (hp->mx_sb_len > sb_len) ? sb_len : hp->mx_sb_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  582  			len = 8 + (int) srp->sense_b[7];	/* Additional sense length field */
^1da177e4c3f41 Linus Torvalds  2005-04-16  583  			len = (len > sb_len) ? sb_len : len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  584  			if (copy_to_user(hp->sbp, srp->sense_b, len)) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  585  				err = -EFAULT;
^1da177e4c3f41 Linus Torvalds  2005-04-16  586  				goto err_out;
650e66d86e6238 Hannes Reinecke 2019-10-21  587  			} else
650e66d86e6238 Hannes Reinecke 2019-10-21  588  				hp->driver_status |= DRIVER_SENSE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  589  			hp->sb_len_wr = len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  590  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  591  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  592  	if (hp->masked_status || hp->host_status || hp->driver_status)
^1da177e4c3f41 Linus Torvalds  2005-04-16  593  		hp->info |= SG_INFO_CHECK;
98aaaec4a150c3 Arnd Bergmann   2019-03-14  594  	err = put_sg_io_hdr(hp, buf);
^1da177e4c3f41 Linus Torvalds  2005-04-16  595  err_out:
3b524a683af899 Tony Battersby  2015-02-11  596  	err2 = sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  597  	sg_remove_request(sfp, srp);
3b524a683af899 Tony Battersby  2015-02-11  598  	return err ? : err2 ? : count;
^1da177e4c3f41 Linus Torvalds  2005-04-16  599  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33217 bytes --]

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

* [hare-scsi-devel:scsi-result-rework 8/146] drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
@ 2021-04-23  9:39 ` Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2021-04-23  9:39 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 13414 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git scsi-result-rework
head:   19720ea7b22b443a182646eef7edc36e32e7b515
commit: 650e66d86e623824cc550f1b8411951116a6b6ea [8/146] scsi: Kill DRIVER_SENSE
config: i386-randconfig-m021-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b'
drivers/scsi/sg.c:579 sg_new_read() warn: this array is probably non-NULL. 'srp->sense_b'

Old smatch warnings:
drivers/scsi/sg.c:484 sg_read() error: we previously assumed 'srp' could be null (see line 470)
drivers/scsi/sg.c:1100 sg_ioctl_common() warn: inconsistent indenting

vim +501 drivers/scsi/sg.c

^1da177e4c3f41 Linus Torvalds  2005-04-16  440  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  441  sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
^1da177e4c3f41 Linus Torvalds  2005-04-16  442  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  443  	Sg_device *sdp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  444  	Sg_fd *sfp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  445  	Sg_request *srp;
^1da177e4c3f41 Linus Torvalds  2005-04-16  446  	int req_pack_id = -1;
^1da177e4c3f41 Linus Torvalds  2005-04-16  447  	sg_io_hdr_t *hp;
78ed001d9e7106 Arnd Bergmann   2019-12-04  448  	struct sg_header *old_hdr;
78ed001d9e7106 Arnd Bergmann   2019-12-04  449  	int retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  450  
26b5b874aff565 Jann Horn       2018-06-25  451  	/*
26b5b874aff565 Jann Horn       2018-06-25  452  	 * This could cause a response to be stranded. Close the associated
26b5b874aff565 Jann Horn       2018-06-25  453  	 * file descriptor to free up any resources being held.
26b5b874aff565 Jann Horn       2018-06-25  454  	 */
26b5b874aff565 Jann Horn       2018-06-25  455  	retval = sg_check_file_access(filp, __func__);
26b5b874aff565 Jann Horn       2018-06-25  456  	if (retval)
26b5b874aff565 Jann Horn       2018-06-25  457  		return retval;
26b5b874aff565 Jann Horn       2018-06-25  458  
^1da177e4c3f41 Linus Torvalds  2005-04-16  459  	if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
^1da177e4c3f41 Linus Torvalds  2005-04-16  460  		return -ENXIO;
95e159d6dd808b Hannes Reinecke 2014-06-25  461  	SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
95e159d6dd808b Hannes Reinecke 2014-06-25  462  				      "sg_read: count=%d\n", (int) count));
d6b10348f93979 Mike Christie   2005-11-08  463  
78ed001d9e7106 Arnd Bergmann   2019-12-04  464  	if (sfp->force_packid)
78ed001d9e7106 Arnd Bergmann   2019-12-04  465  		retval = get_sg_io_pack_id(&req_pack_id, buf, count);
78ed001d9e7106 Arnd Bergmann   2019-12-04  466  	if (retval)
78ed001d9e7106 Arnd Bergmann   2019-12-04  467  		return retval;
78ed001d9e7106 Arnd Bergmann   2019-12-04  468  
^1da177e4c3f41 Linus Torvalds  2005-04-16  469  	srp = sg_get_rq_mark(sfp, req_pack_id);
^1da177e4c3f41 Linus Torvalds  2005-04-16  470  	if (!srp) {		/* now wait on packet to arrive */
78ed001d9e7106 Arnd Bergmann   2019-12-04  471  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  472  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  473  		if (filp->f_flags & O_NONBLOCK)
78ed001d9e7106 Arnd Bergmann   2019-12-04  474  			return -EAGAIN;
3f0c6aba0b65a6 Jörn Engel      2012-04-12  475  		retval = wait_event_interruptible(sfp->read_wait,
cc833acbee9db5 Douglas Gilbert 2014-06-25  476  			(atomic_read(&sdp->detaching) ||
3f0c6aba0b65a6 Jörn Engel      2012-04-12  477  			(srp = sg_get_rq_mark(sfp, req_pack_id))));
78ed001d9e7106 Arnd Bergmann   2019-12-04  478  		if (atomic_read(&sdp->detaching))
78ed001d9e7106 Arnd Bergmann   2019-12-04  479  			return -ENODEV;
78ed001d9e7106 Arnd Bergmann   2019-12-04  480  		if (retval)
cb59e840838193 Douglas Gilbert 2005-04-02  481  			/* -ERESTARTSYS as signal hit process */
78ed001d9e7106 Arnd Bergmann   2019-12-04  482  			return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  483  	}
78ed001d9e7106 Arnd Bergmann   2019-12-04  484  	if (srp->header.interface_id != '\0')
78ed001d9e7106 Arnd Bergmann   2019-12-04  485  		return sg_new_read(sfp, buf, count, srp);
^1da177e4c3f41 Linus Torvalds  2005-04-16  486  
^1da177e4c3f41 Linus Torvalds  2005-04-16  487  	hp = &srp->header;
78ed001d9e7106 Arnd Bergmann   2019-12-04  488  	old_hdr = kzalloc(SZ_SG_HEADER, GFP_KERNEL);
78ed001d9e7106 Arnd Bergmann   2019-12-04  489  	if (!old_hdr)
78ed001d9e7106 Arnd Bergmann   2019-12-04  490  		return -ENOMEM;
78ed001d9e7106 Arnd Bergmann   2019-12-04  491  
cb59e840838193 Douglas Gilbert 2005-04-02  492  	old_hdr->reply_len = (int) hp->timeout;
cb59e840838193 Douglas Gilbert 2005-04-02  493  	old_hdr->pack_len = old_hdr->reply_len; /* old, strange behaviour */
cb59e840838193 Douglas Gilbert 2005-04-02  494  	old_hdr->pack_id = hp->pack_id;
cb59e840838193 Douglas Gilbert 2005-04-02  495  	old_hdr->twelve_byte =
^1da177e4c3f41 Linus Torvalds  2005-04-16  496  	    ((srp->data.cmd_opcode >= 0xc0) && (12 == hp->cmd_len)) ? 1 : 0;
cb59e840838193 Douglas Gilbert 2005-04-02  497  	old_hdr->target_status = hp->masked_status;
cb59e840838193 Douglas Gilbert 2005-04-02  498  	old_hdr->host_status = hp->host_status;
cb59e840838193 Douglas Gilbert 2005-04-02  499  	old_hdr->driver_status = hp->driver_status;
^1da177e4c3f41 Linus Torvalds  2005-04-16  500  	if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @501  	    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
                                                             ^^^^^^^^^^^^
This can't be NULL.

650e66d86e6238 Hannes Reinecke 2019-10-21  502  		old_hdr->driver_status |= DRIVER_SENSE;
cb59e840838193 Douglas Gilbert 2005-04-02  503  		memcpy(old_hdr->sense_buffer, srp->sense_b,
cb59e840838193 Douglas Gilbert 2005-04-02  504  		       sizeof (old_hdr->sense_buffer));
650e66d86e6238 Hannes Reinecke 2019-10-21  505  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  506  	switch (hp->host_status) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  507  	/* This setup of 'result' is for backward compatibility and is best
^1da177e4c3f41 Linus Torvalds  2005-04-16  508  	   ignored by the user who should use target, host + driver status */
^1da177e4c3f41 Linus Torvalds  2005-04-16  509  	case DID_OK:
^1da177e4c3f41 Linus Torvalds  2005-04-16  510  	case DID_PASSTHROUGH:
^1da177e4c3f41 Linus Torvalds  2005-04-16  511  	case DID_SOFT_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  512  		old_hdr->result = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  513  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  514  	case DID_NO_CONNECT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  515  	case DID_BUS_BUSY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  516  	case DID_TIME_OUT:
cb59e840838193 Douglas Gilbert 2005-04-02  517  		old_hdr->result = EBUSY;
^1da177e4c3f41 Linus Torvalds  2005-04-16  518  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  519  	case DID_BAD_TARGET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  520  	case DID_ABORT:
^1da177e4c3f41 Linus Torvalds  2005-04-16  521  	case DID_PARITY:
^1da177e4c3f41 Linus Torvalds  2005-04-16  522  	case DID_RESET:
^1da177e4c3f41 Linus Torvalds  2005-04-16  523  	case DID_BAD_INTR:
cb59e840838193 Douglas Gilbert 2005-04-02  524  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  525  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  526  	case DID_ERROR:
cb59e840838193 Douglas Gilbert 2005-04-02  527  		old_hdr->result = (srp->sense_b[0] == 0 && 
^1da177e4c3f41 Linus Torvalds  2005-04-16  528  				  hp->masked_status == GOOD) ? 0 : EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  529  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  530  	default:
cb59e840838193 Douglas Gilbert 2005-04-02  531  		old_hdr->result = EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  532  		break;
^1da177e4c3f41 Linus Torvalds  2005-04-16  533  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  534  
^1da177e4c3f41 Linus Torvalds  2005-04-16  535  	/* Now copy the result back to the user buffer.  */
^1da177e4c3f41 Linus Torvalds  2005-04-16  536  	if (count >= SZ_SG_HEADER) {
c8c12792d5fe11 Al Viro         2019-10-17  537  		if (copy_to_user(buf, old_hdr, SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  538  			retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  539  			goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  540  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  541  		buf += SZ_SG_HEADER;
cb59e840838193 Douglas Gilbert 2005-04-02  542  		if (count > old_hdr->reply_len)
cb59e840838193 Douglas Gilbert 2005-04-02  543  			count = old_hdr->reply_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  544  		if (count > SZ_SG_HEADER) {
cb59e840838193 Douglas Gilbert 2005-04-02  545  			if (sg_read_oxfer(srp, buf, count - SZ_SG_HEADER)) {
cb59e840838193 Douglas Gilbert 2005-04-02  546  				retval = -EFAULT;
cb59e840838193 Douglas Gilbert 2005-04-02  547  				goto free_old_hdr;
cb59e840838193 Douglas Gilbert 2005-04-02  548  			}
^1da177e4c3f41 Linus Torvalds  2005-04-16  549  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  550  	} else
cb59e840838193 Douglas Gilbert 2005-04-02  551  		count = (old_hdr->result == 0) ? 0 : -EIO;
^1da177e4c3f41 Linus Torvalds  2005-04-16  552  	sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  553  	sg_remove_request(sfp, srp);
cb59e840838193 Douglas Gilbert 2005-04-02  554  	retval = count;
cb59e840838193 Douglas Gilbert 2005-04-02  555  free_old_hdr:
cb59e840838193 Douglas Gilbert 2005-04-02  556  	kfree(old_hdr);
cb59e840838193 Douglas Gilbert 2005-04-02  557  	return retval;
^1da177e4c3f41 Linus Torvalds  2005-04-16  558  }
^1da177e4c3f41 Linus Torvalds  2005-04-16  559  
^1da177e4c3f41 Linus Torvalds  2005-04-16  560  static ssize_t
^1da177e4c3f41 Linus Torvalds  2005-04-16  561  sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
^1da177e4c3f41 Linus Torvalds  2005-04-16  562  {
^1da177e4c3f41 Linus Torvalds  2005-04-16  563  	sg_io_hdr_t *hp = &srp->header;
3b524a683af899 Tony Battersby  2015-02-11  564  	int err = 0, err2;
^1da177e4c3f41 Linus Torvalds  2005-04-16  565  	int len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  566  
78ed001d9e7106 Arnd Bergmann   2019-12-04  567  	if (in_compat_syscall()) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  568  		if (count < sizeof(struct compat_sg_io_hdr)) {
78ed001d9e7106 Arnd Bergmann   2019-12-04  569  			err = -EINVAL;
78ed001d9e7106 Arnd Bergmann   2019-12-04  570  			goto err_out;
78ed001d9e7106 Arnd Bergmann   2019-12-04  571  		}
78ed001d9e7106 Arnd Bergmann   2019-12-04  572  	} else if (count < SZ_SG_IO_HDR) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  573  		err = -EINVAL;
^1da177e4c3f41 Linus Torvalds  2005-04-16  574  		goto err_out;
^1da177e4c3f41 Linus Torvalds  2005-04-16  575  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  576  	hp->sb_len_wr = 0;
^1da177e4c3f41 Linus Torvalds  2005-04-16  577  	if ((hp->mx_sb_len > 0) && hp->sbp) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  578  		if ((CHECK_CONDITION & hp->masked_status) ||
650e66d86e6238 Hannes Reinecke 2019-10-21 @579  		    (srp->sense_b && (srp->sense_b[0] & 0x70) == 0x70)) {
                                                                     ^^^^^^^^^^^^

d6b10348f93979 Mike Christie   2005-11-08  580  			int sb_len = SCSI_SENSE_BUFFERSIZE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  581  			sb_len = (hp->mx_sb_len > sb_len) ? sb_len : hp->mx_sb_len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  582  			len = 8 + (int) srp->sense_b[7];	/* Additional sense length field */
^1da177e4c3f41 Linus Torvalds  2005-04-16  583  			len = (len > sb_len) ? sb_len : len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  584  			if (copy_to_user(hp->sbp, srp->sense_b, len)) {
^1da177e4c3f41 Linus Torvalds  2005-04-16  585  				err = -EFAULT;
^1da177e4c3f41 Linus Torvalds  2005-04-16  586  				goto err_out;
650e66d86e6238 Hannes Reinecke 2019-10-21  587  			} else
650e66d86e6238 Hannes Reinecke 2019-10-21  588  				hp->driver_status |= DRIVER_SENSE;
^1da177e4c3f41 Linus Torvalds  2005-04-16  589  			hp->sb_len_wr = len;
^1da177e4c3f41 Linus Torvalds  2005-04-16  590  		}
^1da177e4c3f41 Linus Torvalds  2005-04-16  591  	}
^1da177e4c3f41 Linus Torvalds  2005-04-16  592  	if (hp->masked_status || hp->host_status || hp->driver_status)
^1da177e4c3f41 Linus Torvalds  2005-04-16  593  		hp->info |= SG_INFO_CHECK;
98aaaec4a150c3 Arnd Bergmann   2019-03-14  594  	err = put_sg_io_hdr(hp, buf);
^1da177e4c3f41 Linus Torvalds  2005-04-16  595  err_out:
3b524a683af899 Tony Battersby  2015-02-11  596  	err2 = sg_finish_rem_req(srp);
97d27b0dd015e9 Hannes Reinecke 2017-04-07  597  	sg_remove_request(sfp, srp);
3b524a683af899 Tony Battersby  2015-02-11  598  	return err ? : err2 ? : count;
^1da177e4c3f41 Linus Torvalds  2005-04-16  599  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33217 bytes --]

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

end of thread, other threads:[~2021-04-23  9:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-22  0:29 [hare-scsi-devel:scsi-result-rework 8/146] drivers/scsi/sg.c:501 sg_read() warn: this array is probably non-NULL. 'srp->sense_b' kernel test robot
2021-04-23  9:39 Dan Carpenter
2021-04-23  9:39 ` Dan Carpenter

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.