Hi Christoph, url: https://github.com/0day-ci/linux/commits/Christoph-Hellwig/MIPS-make-dma_sync_-_for_cpu-a-little-less-overzealous/20200909-120508 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: x86_64-randconfig-m001-20200909 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/xen/swiotlb-xen.c:315 xen_swiotlb_alloc_coherent() error: we previously assumed 'hwdev' could be null (see line 308) # https://github.com/0day-ci/linux/commit/3e9f075c8a9790e7d58348f52270e7e57a721a31 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Christoph-Hellwig/MIPS-make-dma_sync_-_for_cpu-a-little-less-overzealous/20200909-120508 git checkout 3e9f075c8a9790e7d58348f52270e7e57a721a31 vim +/hwdev +315 drivers/xen/swiotlb-xen.c dceb1a6819ab2c Christoph Hellwig 2017-05-21 276 static void * b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 277 xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size, baa676fcf8d555 Andrzej Pietrasiewicz 2012-03-27 278 dma_addr_t *dma_handle, gfp_t flags, 00085f1efa387a Krzysztof Kozlowski 2016-08-03 279 unsigned long attrs) b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 280 { b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 281 void *ret; b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 282 int order = get_order(size); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 283 u64 dma_mask = DMA_BIT_MASK(32); 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 284 phys_addr_t phys; 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 285 dma_addr_t dev_addr; b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 286 b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 287 /* b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 288 * Ignore region specifiers - the kernel's ideas of b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 289 * pseudo-phys memory layout has nothing to do with the b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 290 * machine physical layout. We can't allocate highmem b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 291 * because we can't return a pointer to it. b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 292 */ b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 293 flags &= ~(__GFP_DMA | __GFP_HIGHMEM); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 294 7250f422da0480 Joe Jin 2018-10-16 295 /* Convert the size to actually allocated. */ 7250f422da0480 Joe Jin 2018-10-16 296 size = 1UL << (order + XEN_PAGE_SHIFT); 7250f422da0480 Joe Jin 2018-10-16 297 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 298 /* On ARM this function returns an ioremap'ped virtual address for 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 299 * which virt_to_phys doesn't return the corresponding physical 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 300 * address. In fact on ARM virt_to_phys only works for kernel direct 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 301 * mapped RAM memory. Also see comment below. 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 302 */ 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 303 ret = xen_alloc_coherent_pages(hwdev, size, dma_handle, flags, attrs); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 304 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 305 if (!ret) 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 306 return ret; 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 307 b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 @308 if (hwdev && hwdev->coherent_dma_mask) ^^^^^ Check for NULL 038d07a283d623 Christoph Hellwig 2018-03-19 309 dma_mask = hwdev->coherent_dma_mask; b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 310 91ffe4ad534ab2 Stefano Stabellini 2020-07-10 311 /* At this point dma_handle is the dma address, next we are 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 312 * going to set it to the machine address. 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 313 * Do not use virt_to_phys(ret) because on ARM it doesn't correspond 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 314 * to *dma_handle. */ 91ffe4ad534ab2 Stefano Stabellini 2020-07-10 @315 phys = dma_to_phys(hwdev, *dma_handle); ^^^^^ Unchecked dereference 91ffe4ad534ab2 Stefano Stabellini 2020-07-10 316 dev_addr = xen_phys_to_dma(hwdev, phys); 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 317 if (((dev_addr + size - 1 <= dma_mask)) && 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 318 !range_straddles_page_boundary(phys, size)) 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 319 *dma_handle = dev_addr; 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 320 else { 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 321 if (xen_create_contiguous_region(phys, order, 69908907b02efe Stefano Stabellini 2013-10-09 322 fls64(dma_mask), dma_handle) != 0) { 1b65c4e5a9af1a Stefano Stabellini 2013-10-10 323 xen_free_coherent_pages(hwdev, size, ret, (dma_addr_t)phys, attrs); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 324 return NULL; b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 325 } 91ffe4ad534ab2 Stefano Stabellini 2020-07-10 326 *dma_handle = phys_to_dma(hwdev, *dma_handle); b877ac9815a8fe Juergen Gross 2019-06-14 327 SetPageXenRemapped(virt_to_page(ret)); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 328 } 6810df88dcfc22 Konrad Rzeszutek Wilk 2011-08-25 329 memset(ret, 0, size); b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 330 return ret; b097186fd29d5b Konrad Rzeszutek Wilk 2010-05-11 331 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org