The devm_kzalloc on line 324 makes the kfrees on lines 332 and 355 incorrect. They can just be removed. julia ---------- Forwarded message ---------- Date: Fri, 11 May 2018 10:49:38 +0800 From: kbuild test robot <lkp@xxxxxxxxx> To: kbuild@xxxxxx Cc: Julia Lawall <julia.lawall@xxxxxxx> Subject: [pci:pci/resource 8/10] drivers/pci/of.c:332:3-8: WARNING: invalid free of devm_ allocated data CC: kbuild-all@xxxxxx CC: linux-pci@xxxxxxxxxxxxxxx TO: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> CC: Bjorn Helgaas <helgaas@xxxxxxxxxx> tree: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git pci/resource head: f2837b7a1764f7b58d2febec2fe37fb0cd99de24 commit: 67ed62eb921e31fd51c1d83ca6313b9aa3cead46 [8/10] PCI: Remove unused of_pci_get_host_bridge_resources() :::::: branch date: 4 hours ago :::::: commit date: 4 hours ago >> drivers/pci/of.c:332:3-8: WARNING: invalid free of devm_ allocated data drivers/pci/of.c:355:1-6: WARNING: invalid free of devm_ allocated data # https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/commit/?id=67ed62eb921e31fd51c1d83ca6313b9aa3cead46 git remote add pci https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git git remote update pci git checkout 67ed62eb921e31fd51c1d83ca6313b9aa3cead46 vim +332 drivers/pci/of.c 4670d610d Rob Herring 2018-01-17 244 4670d610d Rob Herring 2018-01-17 245 #if defined(CONFIG_OF_ADDRESS) 67ed62eb9 Jan Kiszka 2018-05-09 246 /** 67ed62eb9 Jan Kiszka 2018-05-09 247 * devm_of_pci_get_host_bridge_resources() - Resource-managed parsing of PCI 67ed62eb9 Jan Kiszka 2018-05-09 248 * host bridge resources from DT 67ed62eb9 Jan Kiszka 2018-05-09 249 * @dev: host bridge device 67ed62eb9 Jan Kiszka 2018-05-09 250 * @busno: bus number associated with the bridge root bus 67ed62eb9 Jan Kiszka 2018-05-09 251 * @bus_max: maximum number of buses for this bridge 67ed62eb9 Jan Kiszka 2018-05-09 252 * @resources: list where the range of resources will be added after DT parsing 67ed62eb9 Jan Kiszka 2018-05-09 253 * @io_base: pointer to a variable that will contain on return the physical 67ed62eb9 Jan Kiszka 2018-05-09 254 * address for the start of the I/O range. Can be NULL if the caller doesn't 67ed62eb9 Jan Kiszka 2018-05-09 255 * expect I/O ranges to be present in the device tree. 67ed62eb9 Jan Kiszka 2018-05-09 256 * 67ed62eb9 Jan Kiszka 2018-05-09 257 * This function will parse the "ranges" property of a PCI host bridge device 67ed62eb9 Jan Kiszka 2018-05-09 258 * node and setup the resource mapping based on its content. It is expected 67ed62eb9 Jan Kiszka 2018-05-09 259 * that the property conforms with the Power ePAPR document. 67ed62eb9 Jan Kiszka 2018-05-09 260 * 67ed62eb9 Jan Kiszka 2018-05-09 261 * It returns zero if the range parsing has been successful or a standard error 67ed62eb9 Jan Kiszka 2018-05-09 262 * value if it failed. 67ed62eb9 Jan Kiszka 2018-05-09 263 */ 67ed62eb9 Jan Kiszka 2018-05-09 264 int devm_of_pci_get_host_bridge_resources(struct device *dev, 4670d610d Rob Herring 2018-01-17 265 unsigned char busno, unsigned char bus_max, 4670d610d Rob Herring 2018-01-17 266 struct list_head *resources, resource_size_t *io_base) 4670d610d Rob Herring 2018-01-17 267 { 67ed62eb9 Jan Kiszka 2018-05-09 268 struct device_node *dev_node = dev->of_node; 4670d610d Rob Herring 2018-01-17 269 struct resource_entry *window; 4670d610d Rob Herring 2018-01-17 270 struct resource *res; 4670d610d Rob Herring 2018-01-17 271 struct resource *bus_range; 4670d610d Rob Herring 2018-01-17 272 struct of_pci_range range; 4670d610d Rob Herring 2018-01-17 273 struct of_pci_range_parser parser; 4670d610d Rob Herring 2018-01-17 274 char range_type[4]; 4670d610d Rob Herring 2018-01-17 275 int err; 4670d610d Rob Herring 2018-01-17 276 4670d610d Rob Herring 2018-01-17 277 if (io_base) 4670d610d Rob Herring 2018-01-17 278 *io_base = (resource_size_t)OF_BAD_ADDR; 4670d610d Rob Herring 2018-01-17 279 07adab611 Jan Kiszka 2018-04-30 280 bus_range = devm_kzalloc(dev,sizeof(*bus_range), GFP_KERNEL); 4670d610d Rob Herring 2018-01-17 281 if (!bus_range) 4670d610d Rob Herring 2018-01-17 282 return -ENOMEM; 4670d610d Rob Herring 2018-01-17 283 877a66649 Jan Kiszka 2018-04-30 284 dev_info(dev, "host bridge %pOF ranges:\n", dev_node); 4670d610d Rob Herring 2018-01-17 285 08c1b3b10 Jan Kiszka 2018-04-30 286 err = of_pci_parse_bus_range(dev_node, bus_range); 4670d610d Rob Herring 2018-01-17 287 if (err) { 4670d610d Rob Herring 2018-01-17 288 bus_range->start = busno; 4670d610d Rob Herring 2018-01-17 289 bus_range->end = bus_max; 4670d610d Rob Herring 2018-01-17 290 bus_range->flags = IORESOURCE_BUS; 877a66649 Jan Kiszka 2018-04-30 291 dev_info(dev, " No bus range found for %pOF, using %pR\n", 08c1b3b10 Jan Kiszka 2018-04-30 292 dev_node, bus_range); 4670d610d Rob Herring 2018-01-17 293 } else { 4670d610d Rob Herring 2018-01-17 294 if (bus_range->end > bus_range->start + bus_max) 4670d610d Rob Herring 2018-01-17 295 bus_range->end = bus_range->start + bus_max; 4670d610d Rob Herring 2018-01-17 296 } 4670d610d Rob Herring 2018-01-17 297 pci_add_resource(resources, bus_range); 4670d610d Rob Herring 2018-01-17 298 4670d610d Rob Herring 2018-01-17 299 /* Check for ranges property */ 08c1b3b10 Jan Kiszka 2018-04-30 300 err = of_pci_range_parser_init(&parser, dev_node); 4670d610d Rob Herring 2018-01-17 301 if (err) 4670d610d Rob Herring 2018-01-17 302 goto parse_failed; 4670d610d Rob Herring 2018-01-17 303 877a66649 Jan Kiszka 2018-04-30 304 dev_dbg(dev, "Parsing ranges property...\n"); 4670d610d Rob Herring 2018-01-17 305 for_each_of_pci_range(&parser, &range) { 4670d610d Rob Herring 2018-01-17 306 /* Read next ranges element */ 4670d610d Rob Herring 2018-01-17 307 if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_IO) 4670d610d Rob Herring 2018-01-17 308 snprintf(range_type, 4, " IO"); 4670d610d Rob Herring 2018-01-17 309 else if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM) 4670d610d Rob Herring 2018-01-17 310 snprintf(range_type, 4, "MEM"); 4670d610d Rob Herring 2018-01-17 311 else 4670d610d Rob Herring 2018-01-17 312 snprintf(range_type, 4, "err"); 877a66649 Jan Kiszka 2018-04-30 313 dev_info(dev, " %s %#010llx..%#010llx -> %#010llx\n", 877a66649 Jan Kiszka 2018-04-30 314 range_type, range.cpu_addr, 877a66649 Jan Kiszka 2018-04-30 315 range.cpu_addr + range.size - 1, range.pci_addr); 4670d610d Rob Herring 2018-01-17 316 4670d610d Rob Herring 2018-01-17 317 /* 4670d610d Rob Herring 2018-01-17 318 * If we failed translation or got a zero-sized region 4670d610d Rob Herring 2018-01-17 319 * then skip this range 4670d610d Rob Herring 2018-01-17 320 */ 4670d610d Rob Herring 2018-01-17 321 if (range.cpu_addr == OF_BAD_ADDR || range.size == 0) 4670d610d Rob Herring 2018-01-17 322 continue; 4670d610d Rob Herring 2018-01-17 323 67ed62eb9 Jan Kiszka 2018-05-09 324 res = devm_kzalloc(dev, sizeof(struct resource), GFP_KERNEL); 4670d610d Rob Herring 2018-01-17 325 if (!res) { 4670d610d Rob Herring 2018-01-17 326 err = -ENOMEM; 4670d610d Rob Herring 2018-01-17 327 goto parse_failed; 4670d610d Rob Herring 2018-01-17 328 } 4670d610d Rob Herring 2018-01-17 329 08c1b3b10 Jan Kiszka 2018-04-30 330 err = of_pci_range_to_resource(&range, dev_node, res); 4670d610d Rob Herring 2018-01-17 331 if (err) { 4670d610d Rob Herring 2018-01-17 @332 kfree(res); 4670d610d Rob Herring 2018-01-17 333 continue; 4670d610d Rob Herring 2018-01-17 334 } 4670d610d Rob Herring 2018-01-17 335 4670d610d Rob Herring 2018-01-17 336 if (resource_type(res) == IORESOURCE_IO) { 4670d610d Rob Herring 2018-01-17 337 if (!io_base) { 877a66649 Jan Kiszka 2018-04-30 338 dev_err(dev, "I/O range found for %pOF. Please provide an io_base pointer to save CPU base address\n", 08c1b3b10 Jan Kiszka 2018-04-30 339 dev_node); 4670d610d Rob Herring 2018-01-17 340 err = -EINVAL; 4670d610d Rob Herring 2018-01-17 341 goto conversion_failed; 4670d610d Rob Herring 2018-01-17 342 } 4670d610d Rob Herring 2018-01-17 343 if (*io_base != (resource_size_t)OF_BAD_ADDR) 877a66649 Jan Kiszka 2018-04-30 344 dev_warn(dev, "More than one I/O resource converted for %pOF. CPU base address for old range lost!\n", 08c1b3b10 Jan Kiszka 2018-04-30 345 dev_node); 4670d610d Rob Herring 2018-01-17 346 *io_base = range.cpu_addr; 4670d610d Rob Herring 2018-01-17 347 } 4670d610d Rob Herring 2018-01-17 348 4670d610d Rob Herring 2018-01-17 349 pci_add_resource_offset(resources, res, res->start - range.pci_addr); 4670d610d Rob Herring 2018-01-17 350 } 4670d610d Rob Herring 2018-01-17 351 4670d610d Rob Herring 2018-01-17 352 return 0; 4670d610d Rob Herring 2018-01-17 353 4670d610d Rob Herring 2018-01-17 354 conversion_failed: 4670d610d Rob Herring 2018-01-17 355 kfree(res); 4670d610d Rob Herring 2018-01-17 356 parse_failed: 4670d610d Rob Herring 2018-01-17 357 resource_list_for_each_entry(window, resources) 4670d610d Rob Herring 2018-01-17 358 kfree(window->res); 4670d610d Rob Herring 2018-01-17 359 pci_free_resource_list(resources); 4670d610d Rob Herring 2018-01-17 360 return err; 4670d610d Rob Herring 2018-01-17 361 } 83d525c0f Jan Kiszka 2018-04-30 362 EXPORT_SYMBOL_GPL(devm_of_pci_get_host_bridge_resources); 4670d610d Rob Herring 2018-01-17 363 #endif /* CONFIG_OF_ADDRESS */ 4670d610d Rob Herring 2018-01-17 364 :::::: The code at line 332 was first introduced by commit :::::: 4670d610d59233b017a6ea1fa25bbf06dabbff42 PCI: Move OF-related PCI functions into PCI core :::::: TO: Rob Herring <robh@xxxxxxxxxx> :::::: CC: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation