Hópur frá háskólanum í Minnesota hefur opinberað upplýsingar um illgjarnar breytingar sem sendar voru.

Í kjölfar opins afsökunarbréfs birti hópur vísindamanna frá háskólanum í Minnesota, þar sem Greg Croah-Hartman stöðvaði samþykki á breytingum á Linux kjarnanum, ítarlegar upplýsingar um plástrana sem sendar voru til kjarnahönnuða og bréfaskipti við viðhaldsaðila. sem tengjast þessum plástra.

Það er athyglisvert að öllum vandamálum plástra var hafnað að frumkvæði umsjónarmanna; ekki einn plástur var samþykktur. Þessi staðreynd gerir það ljóst hvers vegna Greg Croah-Hartman beitti sér svona harkalega, þar sem það er óljóst hvað rannsakendur hefðu gert ef plástrarnir hefðu verið samþykktir af viðhaldsaðilum. Eftir á að hyggja héldu þeir því fram að þeir ætluðu að tilkynna villu og hefðu ekki leyft plástrunum að fara í Git, en það er óljóst hvað þeir hefðu raunverulega gert og hversu langt þeir gætu hafa farið.

Samtals í ágúst 2020 frá nafnlausum heimilisföngum [netvarið] и [netvarið] (bréf frá James Bond) voru sendir fimm plástrar: tveir réttir (1, 2) og þrír sem innihalda faldar villur (1, 2, 3), sem skapa skilyrði fyrir varnarleysi. Hver plástur innihélt aðeins 1-4 línur af kóða. Meginhugmyndin á bak við rangu plástrana var að lagfæring á minnisleka gæti skapað tvöfalt ókeypis varnarleysi. Viku síðar voru upplýsingar sendar til kjarnahönnuða með tillögu um að ræða möguleikann á að stuðla að veikleikum í skjóli léttvægra lagfæringa á minnisleka, en ekkert var sagt um fyrri tilraunir til að senda illgjarna plástra.

Fyrsti vandræðaplásturinn lagaði minnislekann með því að bæta við símtali við kfree() áður en stjórninni var skilað ef villa kom upp, en skapaði skilyrði fyrir aðgangi að minnissvæðinu eftir að það var losað (use-after-free). Þessum plástri var hafnað af umsjónarmanni (Jiri Slaby), sem benti á vandamálið og benti á að fyrir ári síðan hafi einhver þegar reynt að leggja til svipaða breytingu og hún var upphaflega samþykkt, en síðan hent eftir að hafa greint skilyrðin fyrir varnarleysinu. > p2 = p1[n] = kmalloc_array(64, stærð(u16), GFP_KERNEL); > - ef (!p2) skilar -ENOMEM; > + ef (!p2) { > + kfree(p1); > + skila -ENOMEM; > + }

Annar plásturinn innihélt einnig skilyrði fyrir vandamálinu eftir notkun án notkunar. Tilgreindur plástur var ekki samþykktur af umsjónarmanni (Dan Carpenter), sem hafnaði plástrinum vegna annars vandamáls með list_add_tail, en tók ekki eftir því að hægt væri að losa "chdev" bendilinn í put_device fallinu, sem er notað hér að neðan í símtalinu dev_err(&chdev ->dev..). Hins vegar var plásturinn ekki samþykktur, þó af ástæðum sem ekki tengdust varnarleysinu. if (ret < 0) { + put_device(&chdev->dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc mistókst\n"); ret = -ENOMEM; goto err_fifo;

Þriðji plásturinn var heldur ekki samþykktur af viðhaldsaðilanum (Miquel Raynal) vegna annarrar villu sem ekki tengdist varnarleysinu (tvöfaldur kall til að setja fyrir pdev). if (!window->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) mistókst\n", window->phys, window->stærð); + pci_dev_put(pdev); fara út; } ... ef (!kort) { printk(KERN_ERR MOD_NAME ": kmalloc mistókst"); + pci_dev_put(pdev); fara út; } memset(kort, 0, stærð(*kort)); ... if (mtd_device_register(kort->mtd, NULL, 0)) { map_destroy(kort->mtd); map->mtd = NULL; + pci_dev_put(pdev); fara út; }

Athyglisvert var að upphaflega var gert ráð fyrir vandamálum í 4 af hverjum 5 plástrum, en rannsakendurnir sjálfir gerðu mistök og í einum plástri sem var erfiður, að þeirra mati, var lögð til rétt leiðrétting, án þess að væntanleg skilyrði fyrir minnisnotkun eftir að hafa komið upp. err = pci_request_mem_regions(pdev, nitrox_driver_name); ef (villa) { pci_disable_device (pdev); + dev_err(&pdev->dev, “Mistókst að biðja um minni svæði!\n”); skila villa; }

Heimild: opennet.ru

Bæta við athugasemd