[linux-next:master 2808/2998] drivers/dax/bus.c:626 alloc_dev_dax_range() error: potential null dereference 'alloc'. (__request_region returns null)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   3a00d3dfd4b68b208ecd5405e676d06c8ad6bb63
commit: 5e1c2f7ce6aae47f3f10bbe5c4d56594aa14b3b1 [2808/2998] device-dax: add dis-contiguous resource support
config: nios2-randconfig-m031-20200825 (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

smatch warnings:
drivers/dax/bus.c:626 alloc_dev_dax_range() error: potential null dereference 'alloc'.  (__request_region returns null)
drivers/dax/bus.c:626 alloc_dev_dax_range() error: we previously assumed 'alloc' could be null (see line 610)

# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=5e1c2f7ce6aae47f3f10bbe5c4d56594aa14b3b1
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 5e1c2f7ce6aae47f3f10bbe5c4d56594aa14b3b1
vim +/alloc +626 drivers/dax/bus.c

51cf784c42d07f Dan Williams 2017-07-12  581  
6c956f1d0568d6 Dan Williams 2020-08-25  582  static int alloc_dev_dax_range(struct dev_dax *dev_dax, u64 start,
6c956f1d0568d6 Dan Williams 2020-08-25  583  		resource_size_t size)
3774776cf2f571 Dan Williams 2020-08-25  584  {
3774776cf2f571 Dan Williams 2020-08-25  585  	struct dax_region *dax_region = dev_dax->region;
3774776cf2f571 Dan Williams 2020-08-25  586  	struct resource *res = &dax_region->res;
3774776cf2f571 Dan Williams 2020-08-25  587  	struct device *dev = &dev_dax->dev;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  588  	struct dev_dax_range *ranges;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  589  	unsigned long pgoff = 0;
3774776cf2f571 Dan Williams 2020-08-25  590  	struct resource *alloc;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  591  	int i;
3774776cf2f571 Dan Williams 2020-08-25  592  
3774776cf2f571 Dan Williams 2020-08-25  593  	device_lock_assert(dax_region->dev);
3774776cf2f571 Dan Williams 2020-08-25  594  
775775d41abcfd Dan Williams 2020-08-25  595  	/* handle the seed alloc special case */
775775d41abcfd Dan Williams 2020-08-25  596  	if (!size) {
5e1c2f7ce6aae4 Dan Williams 2020-08-25  597  		if (dev_WARN_ONCE(dev, dev_dax->nr_range,
5e1c2f7ce6aae4 Dan Williams 2020-08-25  598  					"0-size allocation must be first\n"))
5e1c2f7ce6aae4 Dan Williams 2020-08-25  599  			return -EBUSY;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  600  		/* nr_range == 0 is elsewhere special cased as 0-size device */
775775d41abcfd Dan Williams 2020-08-25  601  		return 0;
775775d41abcfd Dan Williams 2020-08-25  602  	}
775775d41abcfd Dan Williams 2020-08-25  603  
5e1c2f7ce6aae4 Dan Williams 2020-08-25  604  	ranges = krealloc(dev_dax->ranges, sizeof(*ranges)
5e1c2f7ce6aae4 Dan Williams 2020-08-25  605  			* (dev_dax->nr_range + 1), GFP_KERNEL);
5e1c2f7ce6aae4 Dan Williams 2020-08-25  606  	if (!ranges)
5e1c2f7ce6aae4 Dan Williams 2020-08-25  607  		return -ENOMEM;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  608  
6c956f1d0568d6 Dan Williams 2020-08-25  609  	alloc = __request_region(res, start, size, dev_name(dev), 0);
5e1c2f7ce6aae4 Dan Williams 2020-08-25 @610  	if (!alloc && !dev_dax->nr_range) {
5e1c2f7ce6aae4 Dan Williams 2020-08-25  611  		/*
5e1c2f7ce6aae4 Dan Williams 2020-08-25  612  		 * If we adjusted an existing @ranges leave it alone,
5e1c2f7ce6aae4 Dan Williams 2020-08-25  613  		 * but if this was an empty set of ranges nothing else
5e1c2f7ce6aae4 Dan Williams 2020-08-25  614  		 * will release @ranges, so do it now.
5e1c2f7ce6aae4 Dan Williams 2020-08-25  615  		 */
5e1c2f7ce6aae4 Dan Williams 2020-08-25  616  		kfree(ranges);
3774776cf2f571 Dan Williams 2020-08-25  617  		return -ENOMEM;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  618  	}
3774776cf2f571 Dan Williams 2020-08-25  619  
5e1c2f7ce6aae4 Dan Williams 2020-08-25  620  	for (i = 0; i < dev_dax->nr_range; i++)
5e1c2f7ce6aae4 Dan Williams 2020-08-25  621  		pgoff += PHYS_PFN(range_len(&ranges[i].range));
5e1c2f7ce6aae4 Dan Williams 2020-08-25  622  	dev_dax->ranges = ranges;
5e1c2f7ce6aae4 Dan Williams 2020-08-25  623  	ranges[dev_dax->nr_range++] = (struct dev_dax_range) {
5e1c2f7ce6aae4 Dan Williams 2020-08-25  624  		.pgoff = pgoff,
5e1c2f7ce6aae4 Dan Williams 2020-08-25  625  		.range = {
3774776cf2f571 Dan Williams 2020-08-25 @626  			.start = alloc->start,
3774776cf2f571 Dan Williams 2020-08-25  627  			.end = alloc->end,
5e1c2f7ce6aae4 Dan Williams 2020-08-25  628  		},
3774776cf2f571 Dan Williams 2020-08-25  629  	};
3774776cf2f571 Dan Williams 2020-08-25  630  
5e1c2f7ce6aae4 Dan Williams 2020-08-25  631  	dev_dbg(dev, "alloc range[%d]: %pa:%pa\n", dev_dax->nr_range - 1,
5e1c2f7ce6aae4 Dan Williams 2020-08-25  632  			&alloc->start, &alloc->end);
5e1c2f7ce6aae4 Dan Williams 2020-08-25  633  
3774776cf2f571 Dan Williams 2020-08-25  634  	return 0;
3774776cf2f571 Dan Williams 2020-08-25  635  }
3774776cf2f571 Dan Williams 2020-08-25  636  

:::::: The code at line 626 was first introduced by commit
:::::: 3774776cf2f571343c360204513ccef312fa339f device-dax: add an allocation interface for device-dax instances

:::::: TO: Dan Williams <dan.j.williams@xxxxxxxxx>
:::::: CC: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>

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

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux