Na 'n ope brief van verskoning het 'n groep navorsers van die Universiteit van Minnesota veranderinge aan die kern aanvaar. Linux waarvan Greg Kroah-Hartman geblokkeer het, het gedetailleerde inligting onthul oor die kolle wat na die kernontwikkelaars gestuur is en die korrespondensie met die onderhouers met betrekking tot hierdie kolle.
Dit is opmerklik dat al die problematiese pleisters op die inisiatief van die instandhouers verwerp is; nie 'n enkele pleister is goedgekeur nie. Hierdie feit maak dit duidelik waarom Greg Croah-Hartman so hard opgetree het, aangesien dit onduidelik is wat die navorsers sou gedoen het as die pleisters deur die instandhouers goedgekeur is. Agterna het hulle beweer dat hulle van plan was om 'n fout aan te meld en nie sou toegelaat het dat die pleisters na Git gaan nie, maar dit is onduidelik wat hulle eintlik sou gedoen het en hoe ver hulle kon gegaan het.
In totaal, in Augustus 2020, van anonieme acostag-adresse.ubuntuVyf regstellings is gestuur na @gmail.com en jameslouisebond@gmail.com (die e-pos was van James Bond): twee korrektes (1, 2) en drie wat verborge foute ingesluit het (1, 2, 3) wat toestande vir kwesbaarhede geskep het. Elke regstelling het slegs 1-4 reëls kode bevat. Die basiese idee agter die foutiewe regstellings was dat die regstelling van 'n geheuelek 'n kwesbaarheid as gevolg van 'n dubbelvrystelling kon skep. 'n Week later is die kernontwikkelaars gekontak om die moontlikheid te bespreek om die kwesbaarhede onder die dekmantel van triviale geheuelekregstellings te bevorder, maar niks is genoem oor vorige pogings om kwaadwillige regstellings in te dien nie.
Die eerste problematiese pleister het die geheuelek reggestel deur 'n oproep by kfree() by te voeg voordat beheer teruggegee word in geval van 'n fout, maar voorwaardes geskep vir toegang tot die geheue-area nadat dit vrygestel is (gebruik-na-vry). Hierdie pleister is verwerp deur die onderhouder (Jiri Slaby), wat die probleem geïdentifiseer het en daarop gewys het dat iemand 'n jaar gelede reeds probeer het om 'n soortgelyke verandering voor te stel en dit is aanvanklik aanvaar, maar toe weggegooi nadat die voorwaardes vir die kwesbaarheid geïdentifiseer is. > p2 = p1[n] = kmalloc_array(64, sizeof(u16), GFP_KERNEL); > - as (!p2) gee -ENOMEM terug; > + if (!p2) { > + kvry(p1); > + gee terug -ENOMEM; > + }
Die tweede pleister het ook voorwaardes vir die gebruik-na-vry-probleem bevat. Die gespesifiseerde pleister is nie aanvaar deur die instandhouer (Dan Carpenter), wat die pleister verwerp het weens 'n ander probleem met list_add_tail, maar nie opgemerk het dat die "chdev" wyser vrygestel kon word in die put_device funksie, wat hieronder in die oproep gebruik word dev_err(&chdev ->dev..). Die pleister is egter nie aanvaar nie, hoewel om redes wat nie met die kwesbaarheid verband hou nie. if (ret < 0) { + put_device(&chdev->dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc het misluk\n"); ret = -ENOMEM; goto err_fifo;
Die derde pleister is ook nie deur die onderhouder (Miquel Raynal) aanvaar nie as gevolg van 'n ander fout wat nie met die kwesbaarheid verband hou nie (dubbeloproep om vir pdev te plaas). if (!venster->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) het misluk\n", venster->phys, venster->grootte); + pci_dev_put(pdev); gaan uit; } ... if (!kaart) { printk(KERN_ERR MOD_NAME ": kmalloc het misluk"); + pci_dev_put(pdev); gaan uit; } memset(kaart, 0, groottevan(*kaart)); ... if (mtd_device_register(map->mtd, NULL, 0)) { map_destroy(map->mtd); map->mtd = NULL; + pci_dev_put(pdev); gaan uit; }
Interessant genoeg is aanvanklik aanvaar dat 4 uit 5 pleisters probleme het, maar die navorsers het self 'n fout gemaak en in een pleister wat volgens hul mening problematies was, is 'n korrekte oplossing voorgestel, sonder dat die verwagte voorwaardes vir geheuegebruik na vrye voorkoms plaasgevind het. fout = pci_request_mem_regions(pdev, nitrox_driver_name); if (fout) { pci_disable_device (pdev); + dev_err(&pdev->dev, “Kon nie memstreke versoek nie!\n”); terugkeer fout; }
Bron: opennet.ru
