All of lore.kernel.org
 help / color / mirror / Atom feed
* [osandov:btrfs-send-encoded 8/14] fs/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past the end of array 'pages[i]'
@ 2021-10-25 18:32 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-10-25 18:32 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
CC: Omar Sandoval <osandov@osandov.com>
CC: linux-kernel(a)vger.kernel.org
TO: Omar Sandoval <osandov@fb.com>

tree:   https://github.com/osandov/linux.git btrfs-send-encoded
head:   b460af84b8ddd4fd78e02fec6272b70326b87861
commit: d38f9ac9a40338488424fe7e8058dfb2542ca2ef [8/14] btrfs: add BTRFS_IOC_ENCODED_READ
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: openrisc-randconfig-m031-20211025 (attached as .config)
compiler: or1k-linux-gcc (GCC) 11.2.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/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past the end of array 'pages[i]'
fs/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past the end of array 'pages[i]'

Old smatch warnings:
fs/btrfs/inode.c:287 insert_inline_extent() error: we previously assumed 'compressed_pages' could be null (see line 256)

vim +10831 fs/btrfs/inode.c

d38f9ac9a40338 Omar Sandoval 2019-10-09  10781  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10782  static ssize_t btrfs_encoded_read_regular(struct kiocb *iocb,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10783  					  struct iov_iter *iter,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10784  					  u64 start, u64 lockend,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10785  					  struct extent_state **cached_state,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10786  					  u64 offset, u64 disk_io_size,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10787  					  size_t count, bool compressed,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10788  					  bool *unlocked)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10789  {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10790  	struct inode *inode = file_inode(iocb->ki_filp);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10791  	struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10792  	struct page **pages;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10793  	unsigned long nr_pages, i;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10794  	u64 cur;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10795  	size_t page_offset;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10796  	ssize_t ret;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10797  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10798  	nr_pages = DIV_ROUND_UP(disk_io_size, PAGE_SIZE);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10799  	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10800  	if (!pages)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10801  		return -ENOMEM;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10802  	for (i = 0; i < nr_pages; i++) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10803  		pages[i] = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10804  		if (!pages[i]) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10805  			ret = -ENOMEM;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10806  			goto out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10807  		}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10808  	}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10809  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10810  	ret = btrfs_encoded_read_regular_fill_pages(inode, offset, disk_io_size,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10811  						    pages);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10812  	if (ret)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10813  		goto out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10814  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10815  	unlock_extent_cached(io_tree, start, lockend, cached_state);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10816  	inode_unlock_shared(inode);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10817  	*unlocked = true;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10818  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10819  	if (compressed) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10820  		i = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10821  		page_offset = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10822  	} else {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10823  		i = (iocb->ki_pos - start) >> PAGE_SHIFT;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10824  		page_offset = (iocb->ki_pos - start) & (PAGE_SIZE - 1);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10825  	}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10826  	cur = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10827  	while (cur < count) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10828  		size_t bytes = min_t(size_t, count - cur,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10829  				     PAGE_SIZE - page_offset);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10830  
d38f9ac9a40338 Omar Sandoval 2019-10-09 @10831  		if (copy_page_to_iter(pages[i], page_offset, bytes,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10832  				      iter) != bytes) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10833  			ret = -EFAULT;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10834  			goto out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10835  		}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10836  		i++;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10837  		cur += bytes;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10838  		page_offset = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10839  	}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10840  	ret = count;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10841  out:
d38f9ac9a40338 Omar Sandoval 2019-10-09  10842  	for (i = 0; i < nr_pages; i++) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10843  		if (pages[i])
d38f9ac9a40338 Omar Sandoval 2019-10-09  10844  			__free_page(pages[i]);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10845  	}
d38f9ac9a40338 Omar Sandoval 2019-10-09  10846  	kfree(pages);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10847  	return ret;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10848  }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10849  

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

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-10-25 18:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-25 18:32 [osandov:btrfs-send-encoded 8/14] fs/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past the end of array 'pages[i]' 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.