All of lore.kernel.org
 help / color / mirror / Atom feed
* [block:for-5.13/io_uring 143/149] fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'
@ 2021-04-28 10:52 ` Dan Carpenter
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-04-28 10:52 UTC (permalink / raw)
  To: kbuild

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-5.13/io_uring
head:   a2a7cc32a5e8cd983912f25a242820107e5613dc
commit: 41edf1a5ec967bf4bddedb83c48e02dfea8315b4 [143/149] io_uring: keep table of pointers to ubufs
config: x86_64-randconfig-m031-20210425 (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:
fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'

Old smatch warnings:
fs/io_uring.c:4639 io_recv() error: uninitialized symbol 'flags'.
fs/io_uring.c:4934 io_poll_double_wake() warn: variable dereferenced before check 'poll' (see line 4929)

vim +8234 fs/io_uring.c

0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8205  static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
41edf1a5ec967b Pavel Begunkov    2021-04-25  8206  				  struct io_mapped_ubuf **pimu,
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8207  				  struct page **last_hpage)
edafccee56ff31 Jens Axboe        2019-01-09  8208  {
41edf1a5ec967b Pavel Begunkov    2021-04-25  8209  	struct io_mapped_ubuf *imu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8210  	struct vm_area_struct **vmas = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8211  	struct page **pages = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8212  	unsigned long off, start, end, ubuf;
edafccee56ff31 Jens Axboe        2019-01-09  8213  	size_t size;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8214  	int ret, pret, nr_pages, i;
edafccee56ff31 Jens Axboe        2019-01-09  8215  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8216  	ubuf = (unsigned long) iov->iov_base;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8217  	end = (ubuf + iov->iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8218  	start = ubuf >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8219  	nr_pages = end - start;
edafccee56ff31 Jens Axboe        2019-01-09  8220  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8221  	*pimu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8222  	ret = -ENOMEM;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8223  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8224  	pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8225  	if (!pages)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8226  		goto done;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8227  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8228  	vmas = kvmalloc_array(nr_pages, sizeof(struct vm_area_struct *),
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8229  			      GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8230  	if (!vmas)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8231  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8232  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8233  	imu = kvmalloc(struct_size(imu, bvec, nr_pages), GFP_KERNEL);
de2939388be564 Jens Axboe        2020-09-17 @8234  	if (!imu->bvec)

This should be "if (!imu)"

0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8235  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8236  
edafccee56ff31 Jens Axboe        2019-01-09  8237  	ret = 0;
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8238  	mmap_read_lock(current->mm);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8239  	pret = pin_user_pages(ubuf, nr_pages, FOLL_WRITE | FOLL_LONGTERM,
edafccee56ff31 Jens Axboe        2019-01-09  8240  			      pages, vmas);
edafccee56ff31 Jens Axboe        2019-01-09  8241  	if (pret == nr_pages) {
edafccee56ff31 Jens Axboe        2019-01-09  8242  		/* don't support file backed memory */
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8243  		for (i = 0; i < nr_pages; i++) {
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8244  			struct vm_area_struct *vma = vmas[i];
edafccee56ff31 Jens Axboe        2019-01-09  8245  
edafccee56ff31 Jens Axboe        2019-01-09  8246  			if (vma->vm_file &&
edafccee56ff31 Jens Axboe        2019-01-09  8247  			    !is_file_hugepages(vma->vm_file)) {
edafccee56ff31 Jens Axboe        2019-01-09  8248  				ret = -EOPNOTSUPP;
edafccee56ff31 Jens Axboe        2019-01-09  8249  				break;
edafccee56ff31 Jens Axboe        2019-01-09  8250  			}
edafccee56ff31 Jens Axboe        2019-01-09  8251  		}
edafccee56ff31 Jens Axboe        2019-01-09  8252  	} else {
edafccee56ff31 Jens Axboe        2019-01-09  8253  		ret = pret < 0 ? pret : -EFAULT;
edafccee56ff31 Jens Axboe        2019-01-09  8254  	}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8255  	mmap_read_unlock(current->mm);
edafccee56ff31 Jens Axboe        2019-01-09  8256  	if (ret) {
edafccee56ff31 Jens Axboe        2019-01-09  8257  		/*
edafccee56ff31 Jens Axboe        2019-01-09  8258  		 * if we did partial map, or found file backed vmas,
edafccee56ff31 Jens Axboe        2019-01-09  8259  		 * release any pages we did get
edafccee56ff31 Jens Axboe        2019-01-09  8260  		 */
27c4d3a3252fa6 John Hubbard      2019-08-04  8261  		if (pret > 0)
f1f6a7dd9b53aa John Hubbard      2020-01-30  8262  			unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8263  		goto done;
de2939388be564 Jens Axboe        2020-09-17  8264  	}
de2939388be564 Jens Axboe        2020-09-17  8265  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8266  	ret = io_buffer_account_pin(ctx, pages, pret, imu, last_hpage);
de2939388be564 Jens Axboe        2020-09-17  8267  	if (ret) {
de2939388be564 Jens Axboe        2020-09-17  8268  		unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8269  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8270  	}
edafccee56ff31 Jens Axboe        2019-01-09  8271  
edafccee56ff31 Jens Axboe        2019-01-09  8272  	off = ubuf & ~PAGE_MASK;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8273  	size = iov->iov_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8274  	for (i = 0; i < nr_pages; i++) {
edafccee56ff31 Jens Axboe        2019-01-09  8275  		size_t vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8276  
edafccee56ff31 Jens Axboe        2019-01-09  8277  		vec_len = min_t(size_t, size, PAGE_SIZE - off);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8278  		imu->bvec[i].bv_page = pages[i];
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8279  		imu->bvec[i].bv_len = vec_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8280  		imu->bvec[i].bv_offset = off;
edafccee56ff31 Jens Axboe        2019-01-09  8281  		off = 0;
edafccee56ff31 Jens Axboe        2019-01-09  8282  		size -= vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8283  	}
edafccee56ff31 Jens Axboe        2019-01-09  8284  	/* store original address for later verification */
edafccee56ff31 Jens Axboe        2019-01-09  8285  	imu->ubuf = ubuf;
4751f53d74a688 Pavel Begunkov    2021-04-01  8286  	imu->ubuf_end = ubuf + iov->iov_len;
edafccee56ff31 Jens Axboe        2019-01-09  8287  	imu->nr_bvecs = nr_pages;
41edf1a5ec967b Pavel Begunkov    2021-04-25  8288  	*pimu = imu;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8289  	ret = 0;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8290  done:
41edf1a5ec967b Pavel Begunkov    2021-04-25  8291  	if (ret)
41edf1a5ec967b Pavel Begunkov    2021-04-25  8292  		kvfree(imu);
d4ef647510b120 Mark Rutland      2019-05-01  8293  	kvfree(pages);
d4ef647510b120 Mark Rutland      2019-05-01  8294  	kvfree(vmas);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8295  	return ret;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8296  }

---
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: 36462 bytes --]

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

* [block:for-5.13/io_uring 143/149] fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'
@ 2021-04-28 10:52 ` Dan Carpenter
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-04-28 10:52 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-5.13/io_uring
head:   a2a7cc32a5e8cd983912f25a242820107e5613dc
commit: 41edf1a5ec967bf4bddedb83c48e02dfea8315b4 [143/149] io_uring: keep table of pointers to ubufs
config: x86_64-randconfig-m031-20210425 (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:
fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'

Old smatch warnings:
fs/io_uring.c:4639 io_recv() error: uninitialized symbol 'flags'.
fs/io_uring.c:4934 io_poll_double_wake() warn: variable dereferenced before check 'poll' (see line 4929)

vim +8234 fs/io_uring.c

0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8205  static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
41edf1a5ec967b Pavel Begunkov    2021-04-25  8206  				  struct io_mapped_ubuf **pimu,
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8207  				  struct page **last_hpage)
edafccee56ff31 Jens Axboe        2019-01-09  8208  {
41edf1a5ec967b Pavel Begunkov    2021-04-25  8209  	struct io_mapped_ubuf *imu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8210  	struct vm_area_struct **vmas = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8211  	struct page **pages = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8212  	unsigned long off, start, end, ubuf;
edafccee56ff31 Jens Axboe        2019-01-09  8213  	size_t size;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8214  	int ret, pret, nr_pages, i;
edafccee56ff31 Jens Axboe        2019-01-09  8215  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8216  	ubuf = (unsigned long) iov->iov_base;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8217  	end = (ubuf + iov->iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8218  	start = ubuf >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8219  	nr_pages = end - start;
edafccee56ff31 Jens Axboe        2019-01-09  8220  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8221  	*pimu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8222  	ret = -ENOMEM;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8223  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8224  	pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8225  	if (!pages)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8226  		goto done;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8227  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8228  	vmas = kvmalloc_array(nr_pages, sizeof(struct vm_area_struct *),
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8229  			      GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8230  	if (!vmas)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8231  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8232  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8233  	imu = kvmalloc(struct_size(imu, bvec, nr_pages), GFP_KERNEL);
de2939388be564 Jens Axboe        2020-09-17 @8234  	if (!imu->bvec)

This should be "if (!imu)"

0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8235  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8236  
edafccee56ff31 Jens Axboe        2019-01-09  8237  	ret = 0;
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8238  	mmap_read_lock(current->mm);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8239  	pret = pin_user_pages(ubuf, nr_pages, FOLL_WRITE | FOLL_LONGTERM,
edafccee56ff31 Jens Axboe        2019-01-09  8240  			      pages, vmas);
edafccee56ff31 Jens Axboe        2019-01-09  8241  	if (pret == nr_pages) {
edafccee56ff31 Jens Axboe        2019-01-09  8242  		/* don't support file backed memory */
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8243  		for (i = 0; i < nr_pages; i++) {
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8244  			struct vm_area_struct *vma = vmas[i];
edafccee56ff31 Jens Axboe        2019-01-09  8245  
edafccee56ff31 Jens Axboe        2019-01-09  8246  			if (vma->vm_file &&
edafccee56ff31 Jens Axboe        2019-01-09  8247  			    !is_file_hugepages(vma->vm_file)) {
edafccee56ff31 Jens Axboe        2019-01-09  8248  				ret = -EOPNOTSUPP;
edafccee56ff31 Jens Axboe        2019-01-09  8249  				break;
edafccee56ff31 Jens Axboe        2019-01-09  8250  			}
edafccee56ff31 Jens Axboe        2019-01-09  8251  		}
edafccee56ff31 Jens Axboe        2019-01-09  8252  	} else {
edafccee56ff31 Jens Axboe        2019-01-09  8253  		ret = pret < 0 ? pret : -EFAULT;
edafccee56ff31 Jens Axboe        2019-01-09  8254  	}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8255  	mmap_read_unlock(current->mm);
edafccee56ff31 Jens Axboe        2019-01-09  8256  	if (ret) {
edafccee56ff31 Jens Axboe        2019-01-09  8257  		/*
edafccee56ff31 Jens Axboe        2019-01-09  8258  		 * if we did partial map, or found file backed vmas,
edafccee56ff31 Jens Axboe        2019-01-09  8259  		 * release any pages we did get
edafccee56ff31 Jens Axboe        2019-01-09  8260  		 */
27c4d3a3252fa6 John Hubbard      2019-08-04  8261  		if (pret > 0)
f1f6a7dd9b53aa John Hubbard      2020-01-30  8262  			unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8263  		goto done;
de2939388be564 Jens Axboe        2020-09-17  8264  	}
de2939388be564 Jens Axboe        2020-09-17  8265  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8266  	ret = io_buffer_account_pin(ctx, pages, pret, imu, last_hpage);
de2939388be564 Jens Axboe        2020-09-17  8267  	if (ret) {
de2939388be564 Jens Axboe        2020-09-17  8268  		unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8269  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8270  	}
edafccee56ff31 Jens Axboe        2019-01-09  8271  
edafccee56ff31 Jens Axboe        2019-01-09  8272  	off = ubuf & ~PAGE_MASK;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8273  	size = iov->iov_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8274  	for (i = 0; i < nr_pages; i++) {
edafccee56ff31 Jens Axboe        2019-01-09  8275  		size_t vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8276  
edafccee56ff31 Jens Axboe        2019-01-09  8277  		vec_len = min_t(size_t, size, PAGE_SIZE - off);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8278  		imu->bvec[i].bv_page = pages[i];
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8279  		imu->bvec[i].bv_len = vec_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8280  		imu->bvec[i].bv_offset = off;
edafccee56ff31 Jens Axboe        2019-01-09  8281  		off = 0;
edafccee56ff31 Jens Axboe        2019-01-09  8282  		size -= vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8283  	}
edafccee56ff31 Jens Axboe        2019-01-09  8284  	/* store original address for later verification */
edafccee56ff31 Jens Axboe        2019-01-09  8285  	imu->ubuf = ubuf;
4751f53d74a688 Pavel Begunkov    2021-04-01  8286  	imu->ubuf_end = ubuf + iov->iov_len;
edafccee56ff31 Jens Axboe        2019-01-09  8287  	imu->nr_bvecs = nr_pages;
41edf1a5ec967b Pavel Begunkov    2021-04-25  8288  	*pimu = imu;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8289  	ret = 0;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8290  done:
41edf1a5ec967b Pavel Begunkov    2021-04-25  8291  	if (ret)
41edf1a5ec967b Pavel Begunkov    2021-04-25  8292  		kvfree(imu);
d4ef647510b120 Mark Rutland      2019-05-01  8293  	kvfree(pages);
d4ef647510b120 Mark Rutland      2019-05-01  8294  	kvfree(vmas);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8295  	return ret;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8296  }

---
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: 36462 bytes --]

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

* Re: [block:for-5.13/io_uring 143/149] fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'
  2021-04-28 10:52 ` Dan Carpenter
  (?)
@ 2021-04-28 12:57 ` Pavel Begunkov
  -1 siblings, 0 replies; 4+ messages in thread
From: Pavel Begunkov @ 2021-04-28 12:57 UTC (permalink / raw)
  To: kbuild-all

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

On 4/28/21 11:52 AM, Dan Carpenter wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-5.13/io_uring
> head:   a2a7cc32a5e8cd983912f25a242820107e5613dc
> commit: 41edf1a5ec967bf4bddedb83c48e02dfea8315b4 [143/149] io_uring: keep table of pointers to ubufs
> config: x86_64-randconfig-m031-20210425 (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:
> fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'

already fixed, thanks

> 
> Old smatch warnings:
> fs/io_uring.c:4639 io_recv() error: uninitialized symbol 'flags'.
> fs/io_uring.c:4934 io_poll_double_wake() warn: variable dereferenced before check 'poll' (see line 4929)
> 
> vim +8234 fs/io_uring.c
> 
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8205  static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8206  				  struct io_mapped_ubuf **pimu,
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8207  				  struct page **last_hpage)
> edafccee56ff31 Jens Axboe        2019-01-09  8208  {
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8209  	struct io_mapped_ubuf *imu = NULL;
> edafccee56ff31 Jens Axboe        2019-01-09  8210  	struct vm_area_struct **vmas = NULL;
> edafccee56ff31 Jens Axboe        2019-01-09  8211  	struct page **pages = NULL;
> edafccee56ff31 Jens Axboe        2019-01-09  8212  	unsigned long off, start, end, ubuf;
> edafccee56ff31 Jens Axboe        2019-01-09  8213  	size_t size;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8214  	int ret, pret, nr_pages, i;
> edafccee56ff31 Jens Axboe        2019-01-09  8215  
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8216  	ubuf = (unsigned long) iov->iov_base;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8217  	end = (ubuf + iov->iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
> edafccee56ff31 Jens Axboe        2019-01-09  8218  	start = ubuf >> PAGE_SHIFT;
> edafccee56ff31 Jens Axboe        2019-01-09  8219  	nr_pages = end - start;
> edafccee56ff31 Jens Axboe        2019-01-09  8220  
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8221  	*pimu = NULL;
> edafccee56ff31 Jens Axboe        2019-01-09  8222  	ret = -ENOMEM;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8223  
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8224  	pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8225  	if (!pages)
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8226  		goto done;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8227  
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8228  	vmas = kvmalloc_array(nr_pages, sizeof(struct vm_area_struct *),
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8229  			      GFP_KERNEL);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8230  	if (!vmas)
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8231  		goto done;
> edafccee56ff31 Jens Axboe        2019-01-09  8232  
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8233  	imu = kvmalloc(struct_size(imu, bvec, nr_pages), GFP_KERNEL);
> de2939388be564 Jens Axboe        2020-09-17 @8234  	if (!imu->bvec)
> 
> This should be "if (!imu)"
> 
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8235  		goto done;
> edafccee56ff31 Jens Axboe        2019-01-09  8236  
> edafccee56ff31 Jens Axboe        2019-01-09  8237  	ret = 0;
> d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8238  	mmap_read_lock(current->mm);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8239  	pret = pin_user_pages(ubuf, nr_pages, FOLL_WRITE | FOLL_LONGTERM,
> edafccee56ff31 Jens Axboe        2019-01-09  8240  			      pages, vmas);
> edafccee56ff31 Jens Axboe        2019-01-09  8241  	if (pret == nr_pages) {
> edafccee56ff31 Jens Axboe        2019-01-09  8242  		/* don't support file backed memory */
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8243  		for (i = 0; i < nr_pages; i++) {
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8244  			struct vm_area_struct *vma = vmas[i];
> edafccee56ff31 Jens Axboe        2019-01-09  8245  
> edafccee56ff31 Jens Axboe        2019-01-09  8246  			if (vma->vm_file &&
> edafccee56ff31 Jens Axboe        2019-01-09  8247  			    !is_file_hugepages(vma->vm_file)) {
> edafccee56ff31 Jens Axboe        2019-01-09  8248  				ret = -EOPNOTSUPP;
> edafccee56ff31 Jens Axboe        2019-01-09  8249  				break;
> edafccee56ff31 Jens Axboe        2019-01-09  8250  			}
> edafccee56ff31 Jens Axboe        2019-01-09  8251  		}
> edafccee56ff31 Jens Axboe        2019-01-09  8252  	} else {
> edafccee56ff31 Jens Axboe        2019-01-09  8253  		ret = pret < 0 ? pret : -EFAULT;
> edafccee56ff31 Jens Axboe        2019-01-09  8254  	}
> d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8255  	mmap_read_unlock(current->mm);
> edafccee56ff31 Jens Axboe        2019-01-09  8256  	if (ret) {
> edafccee56ff31 Jens Axboe        2019-01-09  8257  		/*
> edafccee56ff31 Jens Axboe        2019-01-09  8258  		 * if we did partial map, or found file backed vmas,
> edafccee56ff31 Jens Axboe        2019-01-09  8259  		 * release any pages we did get
> edafccee56ff31 Jens Axboe        2019-01-09  8260  		 */
> 27c4d3a3252fa6 John Hubbard      2019-08-04  8261  		if (pret > 0)
> f1f6a7dd9b53aa John Hubbard      2020-01-30  8262  			unpin_user_pages(pages, pret);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8263  		goto done;
> de2939388be564 Jens Axboe        2020-09-17  8264  	}
> de2939388be564 Jens Axboe        2020-09-17  8265  
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8266  	ret = io_buffer_account_pin(ctx, pages, pret, imu, last_hpage);
> de2939388be564 Jens Axboe        2020-09-17  8267  	if (ret) {
> de2939388be564 Jens Axboe        2020-09-17  8268  		unpin_user_pages(pages, pret);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8269  		goto done;
> edafccee56ff31 Jens Axboe        2019-01-09  8270  	}
> edafccee56ff31 Jens Axboe        2019-01-09  8271  
> edafccee56ff31 Jens Axboe        2019-01-09  8272  	off = ubuf & ~PAGE_MASK;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8273  	size = iov->iov_len;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8274  	for (i = 0; i < nr_pages; i++) {
> edafccee56ff31 Jens Axboe        2019-01-09  8275  		size_t vec_len;
> edafccee56ff31 Jens Axboe        2019-01-09  8276  
> edafccee56ff31 Jens Axboe        2019-01-09  8277  		vec_len = min_t(size_t, size, PAGE_SIZE - off);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8278  		imu->bvec[i].bv_page = pages[i];
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8279  		imu->bvec[i].bv_len = vec_len;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8280  		imu->bvec[i].bv_offset = off;
> edafccee56ff31 Jens Axboe        2019-01-09  8281  		off = 0;
> edafccee56ff31 Jens Axboe        2019-01-09  8282  		size -= vec_len;
> edafccee56ff31 Jens Axboe        2019-01-09  8283  	}
> edafccee56ff31 Jens Axboe        2019-01-09  8284  	/* store original address for later verification */
> edafccee56ff31 Jens Axboe        2019-01-09  8285  	imu->ubuf = ubuf;
> 4751f53d74a688 Pavel Begunkov    2021-04-01  8286  	imu->ubuf_end = ubuf + iov->iov_len;
> edafccee56ff31 Jens Axboe        2019-01-09  8287  	imu->nr_bvecs = nr_pages;
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8288  	*pimu = imu;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8289  	ret = 0;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8290  done:
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8291  	if (ret)
> 41edf1a5ec967b Pavel Begunkov    2021-04-25  8292  		kvfree(imu);
> d4ef647510b120 Mark Rutland      2019-05-01  8293  	kvfree(pages);
> d4ef647510b120 Mark Rutland      2019-05-01  8294  	kvfree(vmas);
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8295  	return ret;
> 0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8296  }
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
> 

-- 
Pavel Begunkov

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

* [block:for-5.13/io_uring 143/149] fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'
@ 2021-04-25 22:26 kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-04-25 22:26 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
TO: Pavel Begunkov <asml.silence@gmail.com>
CC: Jens Axboe <axboe@kernel.dk>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-5.13/io_uring
head:   a2a7cc32a5e8cd983912f25a242820107e5613dc
commit: 41edf1a5ec967bf4bddedb83c48e02dfea8315b4 [143/149] io_uring: keep table of pointers to ubufs
:::::: branch date: 6 hours ago
:::::: commit date: 6 hours ago
config: x86_64-randconfig-m031-20210425 (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:
fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec'

Old smatch warnings:
fs/io_uring.c:4639 io_recv() error: uninitialized symbol 'flags'.
fs/io_uring.c:4934 io_poll_double_wake() warn: variable dereferenced before check 'poll' (see line 4929)

vim +8234 fs/io_uring.c

edafccee56ff31 Jens Axboe        2019-01-09  8204  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8205  static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
41edf1a5ec967b Pavel Begunkov    2021-04-25  8206  				  struct io_mapped_ubuf **pimu,
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8207  				  struct page **last_hpage)
edafccee56ff31 Jens Axboe        2019-01-09  8208  {
41edf1a5ec967b Pavel Begunkov    2021-04-25  8209  	struct io_mapped_ubuf *imu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8210  	struct vm_area_struct **vmas = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8211  	struct page **pages = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8212  	unsigned long off, start, end, ubuf;
edafccee56ff31 Jens Axboe        2019-01-09  8213  	size_t size;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8214  	int ret, pret, nr_pages, i;
edafccee56ff31 Jens Axboe        2019-01-09  8215  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8216  	ubuf = (unsigned long) iov->iov_base;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8217  	end = (ubuf + iov->iov_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8218  	start = ubuf >> PAGE_SHIFT;
edafccee56ff31 Jens Axboe        2019-01-09  8219  	nr_pages = end - start;
edafccee56ff31 Jens Axboe        2019-01-09  8220  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8221  	*pimu = NULL;
edafccee56ff31 Jens Axboe        2019-01-09  8222  	ret = -ENOMEM;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8223  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8224  	pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8225  	if (!pages)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8226  		goto done;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8227  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8228  	vmas = kvmalloc_array(nr_pages, sizeof(struct vm_area_struct *),
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8229  			      GFP_KERNEL);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8230  	if (!vmas)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8231  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8232  
41edf1a5ec967b Pavel Begunkov    2021-04-25  8233  	imu = kvmalloc(struct_size(imu, bvec, nr_pages), GFP_KERNEL);
de2939388be564 Jens Axboe        2020-09-17 @8234  	if (!imu->bvec)
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8235  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8236  
edafccee56ff31 Jens Axboe        2019-01-09  8237  	ret = 0;
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8238  	mmap_read_lock(current->mm);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8239  	pret = pin_user_pages(ubuf, nr_pages, FOLL_WRITE | FOLL_LONGTERM,
edafccee56ff31 Jens Axboe        2019-01-09  8240  			      pages, vmas);
edafccee56ff31 Jens Axboe        2019-01-09  8241  	if (pret == nr_pages) {
edafccee56ff31 Jens Axboe        2019-01-09  8242  		/* don't support file backed memory */
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8243  		for (i = 0; i < nr_pages; i++) {
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8244  			struct vm_area_struct *vma = vmas[i];
edafccee56ff31 Jens Axboe        2019-01-09  8245  
edafccee56ff31 Jens Axboe        2019-01-09  8246  			if (vma->vm_file &&
edafccee56ff31 Jens Axboe        2019-01-09  8247  			    !is_file_hugepages(vma->vm_file)) {
edafccee56ff31 Jens Axboe        2019-01-09  8248  				ret = -EOPNOTSUPP;
edafccee56ff31 Jens Axboe        2019-01-09  8249  				break;
edafccee56ff31 Jens Axboe        2019-01-09  8250  			}
edafccee56ff31 Jens Axboe        2019-01-09  8251  		}
edafccee56ff31 Jens Axboe        2019-01-09  8252  	} else {
edafccee56ff31 Jens Axboe        2019-01-09  8253  		ret = pret < 0 ? pret : -EFAULT;
edafccee56ff31 Jens Axboe        2019-01-09  8254  	}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  8255  	mmap_read_unlock(current->mm);
edafccee56ff31 Jens Axboe        2019-01-09  8256  	if (ret) {
edafccee56ff31 Jens Axboe        2019-01-09  8257  		/*
edafccee56ff31 Jens Axboe        2019-01-09  8258  		 * if we did partial map, or found file backed vmas,
edafccee56ff31 Jens Axboe        2019-01-09  8259  		 * release any pages we did get
edafccee56ff31 Jens Axboe        2019-01-09  8260  		 */
27c4d3a3252fa6 John Hubbard      2019-08-04  8261  		if (pret > 0)
f1f6a7dd9b53aa John Hubbard      2020-01-30  8262  			unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8263  		goto done;
de2939388be564 Jens Axboe        2020-09-17  8264  	}
de2939388be564 Jens Axboe        2020-09-17  8265  
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8266  	ret = io_buffer_account_pin(ctx, pages, pret, imu, last_hpage);
de2939388be564 Jens Axboe        2020-09-17  8267  	if (ret) {
de2939388be564 Jens Axboe        2020-09-17  8268  		unpin_user_pages(pages, pret);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8269  		goto done;
edafccee56ff31 Jens Axboe        2019-01-09  8270  	}
edafccee56ff31 Jens Axboe        2019-01-09  8271  
edafccee56ff31 Jens Axboe        2019-01-09  8272  	off = ubuf & ~PAGE_MASK;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8273  	size = iov->iov_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8274  	for (i = 0; i < nr_pages; i++) {
edafccee56ff31 Jens Axboe        2019-01-09  8275  		size_t vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8276  
edafccee56ff31 Jens Axboe        2019-01-09  8277  		vec_len = min_t(size_t, size, PAGE_SIZE - off);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8278  		imu->bvec[i].bv_page = pages[i];
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8279  		imu->bvec[i].bv_len = vec_len;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8280  		imu->bvec[i].bv_offset = off;
edafccee56ff31 Jens Axboe        2019-01-09  8281  		off = 0;
edafccee56ff31 Jens Axboe        2019-01-09  8282  		size -= vec_len;
edafccee56ff31 Jens Axboe        2019-01-09  8283  	}
edafccee56ff31 Jens Axboe        2019-01-09  8284  	/* store original address for later verification */
edafccee56ff31 Jens Axboe        2019-01-09  8285  	imu->ubuf = ubuf;
4751f53d74a688 Pavel Begunkov    2021-04-01  8286  	imu->ubuf_end = ubuf + iov->iov_len;
edafccee56ff31 Jens Axboe        2019-01-09  8287  	imu->nr_bvecs = nr_pages;
41edf1a5ec967b Pavel Begunkov    2021-04-25  8288  	*pimu = imu;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8289  	ret = 0;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8290  done:
41edf1a5ec967b Pavel Begunkov    2021-04-25  8291  	if (ret)
41edf1a5ec967b Pavel Begunkov    2021-04-25  8292  		kvfree(imu);
d4ef647510b120 Mark Rutland      2019-05-01  8293  	kvfree(pages);
d4ef647510b120 Mark Rutland      2019-05-01  8294  	kvfree(vmas);
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8295  	return ret;
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8296  }
0a96bbe49994a4 Bijan Mottahedeh  2021-01-06  8297  

:::::: The code at line 8234 was first introduced by commit
:::::: de2939388be564836b06f0f06b3787bdedaed822 io_uring: improve registered buffer accounting for huge pages

:::::: TO: Jens Axboe <axboe@kernel.dk>
:::::: CC: Jens Axboe <axboe@kernel.dk>

---
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: 36462 bytes --]

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

end of thread, other threads:[~2021-04-28 12:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-28 10:52 [block:for-5.13/io_uring 143/149] fs/io_uring.c:8234 io_sqe_buffer_register() warn: this array is probably non-NULL. 'imu->bvec' Dan Carpenter
2021-04-28 10:52 ` Dan Carpenter
2021-04-28 12:57 ` Pavel Begunkov
  -- strict thread matches above, loose matches on Subject: below --
2021-04-25 22:26 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.