ืืขืงืืืช ืืืชื ืืชื ืฆืืืช ืคืชืื, ืงืืืฆืช ืืืงืจืื ืืืื ืืืจืกืืืช ืืื ืกืืื, ืฉืืจื ืงืจืืื-ืืจืืื ืืกืื ืืช ืงืืืช ืืฉืื ืืืื ืืงืจื ื ืืืื ืืงืก, ืืฉืคื ืืืืข ืืคืืจื ืขื ืืชืืงืื ืื ืฉื ืฉืืื ืืืคืชืื ืืืืื ืืืืชืืชืืืช ืขื ืืืชืืืงืื ืืงืฉืืจืื ืืืืืื ืืืื.
ืจืืื ืืฆืืื ืื ืื ืืชืืงืื ืื ืืืขืืืชืืื ื ืืื ืืืืืืช ืืืชืืืงืื, ืืฃ ืชืืงืื ืืื ืื ืืืฉืจ. ืขืืืื ืื ืืืืืจื ืืืืข ืืจื ืงืจืืื-ืืจืืื ืคืขื ืืฆืืจื ืื ืงืฉื, ืฉืื ืื ืืจืืจ ืื ืืืืงืจืื ืืื ืขืืฉืื ืืืื ืืชืืงืื ืื ืืื ืืืืฉืจืื ืขื ืืื ืืืชืืืงืื. ืืืืขืื, ืื ืืขื ื ืฉืื ืืชืืืื ื ืืืืื ืขื ืืื ืืื ืืื ืืืคืฉืจืื ืืชืืงืื ืื ืืขืืืจ ื-Git, ืืื ืื ืืจืืจ ืื ืื ืืื ืขืืฉืื ืืคืืขื ืืขื ืืื ืจืืืง ืื ืืื ืืืืืื.
ืกื ืืื ืืืืืืกื 2020 ืืืชืืืืช ืื ืื ืืืืืช [ืืืื ืืืื"ื] ะธ [ืืืื ืืืื"ื] (ืืืชื ืื'ืืืืก ืืื ื) ื ืฉืืื ืืืืฉื ืชืืงืื ืื: ืฉื ืืื ื ืืื ืื (1, 2) ืืฉืืืฉื ืืืืืืื ืฉืืืืืช ื ืกืชืจืืช (1, 2, 3), ืืืืฆืจืื ืชื ืืื ืืคืืืขืืืืช. ืื ืชืืงืื ืืืื ืจืง 1-4 ืฉืืจืืช ืงืื. ืืจืขืืื ืืืจืืื ืืืืืจื ืืชืืงืื ืื ืืฉืืืืื ืืื ืฉืชืืงืื ืืืืคืช ืืืืจืื ืืืื ืืืฆืืจ ืืฆื ืคืืืขืืช ืคื ืื ืืคืื. ืฉืืืข ืืืืจ ืืื ื ืฉืื ืืืืข ืืืคืชืื ืืืืื ืขื ืืฆืขื ืืืื ืืืคืฉืจืืช ืืงืื ื ืงืืืืช ืชืืจืคื ืืืกืืื ืฉื ืชืืงืื ืื ืืจืืืืืืืืื ืืืืืคืืช ืืืืจืื, ืื ืืืจ ืื ื ืืืจ ืขื ื ืืกืืื ืืช ืงืืืืื ืืฉืืื ืืืืื ืืืื ืืื.
ืืชืืงืื ืืืขืืืชื ืืจืืฉืื ืชืืงื ืืช ืืืืคืช ืืืืืจืื ืขื ืืื ืืืกืคืช ืงืจืืื ื-kfree() ืืคื ื ืืืืจืช ืืฉืืืื ืืืงืจื ืฉื ืฉืืืื, ืื ืืฆืจ ืชื ืืื ืืืืฉื ืืืืืจ ืืืืืจืื ืืืืจ ืฉืืฉืชืืจืจ (use-after-free). ืืชืืงืื ืืื ื ืืื ืขื ืืื ืืืชืืืง (Jiri Slaby), ืฉืืืื ืืช ืืืขืื ืืืฆืืืข ืขื ืื ืฉืืคื ื ืฉื ื ืืืฉืื ืืืจ ื ืืกื ืืืฆืืข ืฉืื ืื ืืืื ืืืื ืืชืงืื ืืชืืืื, ืื ืืืืจ ืืื ื ืืืง ืืืืจ ืืืืื ืืชื ืืื ืืคืืืขืืช. > p2 = p1[n] = kmalloc_array(64, sizeof(u16), GFP_KERNEL); > - ืื (!p2) ืืืืืจื -ENOMEM; > + if (!p2) { > + kfree(p1); > + ืืืืจ -ENOMEM; > + }
ืืชืืงืื ืืฉื ื ืืืื ืื ืชื ืืื ืืืขืื ืฉืืืืจ ืืฉืืืืฉ. ืืชืืงืื ืฉืฆืืื ืื ืืชืงืื ืขื ืืื ืืืชืืืง (ืื ืงืจืคื ืืจ), ืฉืืื ืืช ืืชืืงืื ืขืงื ืืขืื ืืืจืช ืขื list_add_tail, ืื ืื ืฉื ืื ืฉื ืืชื ืืฉืืจืจ ืืช ืืฆืืืข ื"chdev" ืืคืื ืงืฆืืืช put_device, ืืืฉืืฉืช ืืืื ืืงืจืืื dev_err(&chdev ->dev..). ืขื ืืืช, ืืชืืงืื ืื ืืชืงืื, ืื ืื ืืกืืืืช ืฉืืื ื ืงืฉืืจืืช ืืคืืืขืืช. if (ret < 0) { + put_device(&chdev->dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc ื ืืฉื\n"); ret = -ENOMEM; goto err_fifo;
ืื ืืชืืงืื ืืฉืืืฉื ืื ืืชืงืื ืขื ืืื ืืืชืืืง (ืืืงื ืจืืื ื) ืืืื ืืื ืืืจ ืฉืื ืงืฉืืจ ืืคืืืขืืช (ืงืจืืื ืืคืืื ื-pdev). if (!window->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) ื ืืฉื\n", window->phys, window->size); + pci_dev_put(pdev); ืืฆืืช ืืืืฆื; } ... if (!map) { printk(KERN_ERR MOD_NAME ": kmalloc ื ืืฉื"); + pci_dev_put(pdev); ืืฆืืช ืืืืฆื; } memset(map, 0, sizeof(*map)); ... if (mtd_device_register(map->mtd, NULL, 0)) { map_destroy(map->mtd); map->mtd = NULL; + pci_dev_put(pdev); ืืฆืืช ืืืืฆื; }
ืืขื ืืื ืฉืืืชืืื 4 ืืชืื 5 ืชืืงืื ืื ืืื ืื ืขื ืืขืืืช, ืื ืืืืงืจืื ืขืฆืื ืขืฉื ืืขืืช ืืืชืืงืื ืืื ืฉืืื ืืขืืืชื, ืืืขืชื, ืืืฆืข ืชืืงืื ื ืืื, ืืื ืืชื ืืื ืืฆืคืืืื ืืฉืืืืฉ ืืืืืจืื ืืืืจ ืืชืจืืฉืืช ืืืคืฉืืช. err = pci_request_mem_regions(pdev, nitrox_driver_name); if (err) { pci_disable_device(pdev); + dev_err(&pdev->dev, "ื ืืฉื ืืืงืฉืช ืืืืจื mem!\n"); ืฉืืืื ืืืืจืช; }
ืืงืืจ: OpenNet.ru