Մինեսոտայի համալսարանի թիմը մանրամասներ է բացահայտել չարամիտ փոփոխությունների մասին, որոնք ուղարկվել են:

Ներողություն խնդրելու բաց նամակից հետո Մինեսոտայի համալսարանի մի խումբ հետազոտողներ, որոնց փոփոխությունների ընդունումը Linux միջուկում արգելափակվել էր Գրեգ Քրոա-Հարթմանի կողմից, մանրամասն տեղեկություններ բացահայտեցին միջուկի մշակողներին ուղարկված պատչերի և սպասարկողների հետ նամակագրության մասին։ կապված այս կարկատանների հետ:

Հատկանշական է, որ բոլոր խնդրահարույց պատչերը մերժվել են սպասարկողների նախաձեռնությամբ, ոչ մի կարկատ չի հաստատվել։ Այս փաստը պարզ է դարձնում, թե ինչու է Գրեգ Քրոահ-Հարթմանը այդքան դաժան վարվել, քանի որ պարզ չէ, թե ինչ կանեին հետազոտողները, եթե կարկատանները հաստատվեին սպասարկողների կողմից: Հետագայում նրանք պնդում էին, որ մտադիր են հայտնել սխալի մասին և թույլ չեն տա, որ կարկատները գնան Git, բայց պարզ չէ, թե իրականում ինչ կանեին և որքան հեռու կարող էին գնալ:

Ընդամենը 2020 թվականի օգոստոսին՝ անանուն հասցեներից [էլեկտրոնային փոստով պաշտպանված] и [էլեկտրոնային փոստով պաշտպանված] (Ջեյմս Բոնդի նամակը) ուղարկվել է հինգ կարկատան՝ երկու ճիշտ (1, 2) և երեքը պարունակող թաքնված սխալներ (1, 2, 3)՝ պայմաններ ստեղծելով խոցելիության համար։ Յուրաքանչյուր պատչ պարունակում էր ընդամենը 1-4 տող կոդ։ Սխալ կարկատանների հիմքում ընկած հիմնական գաղափարն այն էր, որ հիշողության արտահոսքի շտկումը կարող է ստեղծել կրկնակի ազատ խոցելիության վիճակ: Մեկ շաբաթ անց տեղեկատվություն ուղարկվեց միջուկի մշակողներին՝ առաջարկելով քննարկել հիշողության արտահոսքի աննշան շտկումների քողի տակ խոցելիության առաջխաղացման հնարավորությունը, բայց ոչինչ չասվեց վնասակար կարկատաններ ուղարկելու նախկին փորձերի մասին:

Առաջին խնդրահարույց պատչը շտկեց հիշողության արտահոսքը՝ ավելացնելով զանգ kfree()-ին, նախքան սխալի դեպքում կառավարումը վերադարձնելը, բայց պայմաններ ստեղծեց հիշողության տարածք մուտք գործելու համար այն ազատվելուց հետո (օգտագործումից հետո ազատ): Այս կարկատելը մերժվել է սպասարկողի կողմից (Jiri Slaby), ով բացահայտել է խնդիրը և նշել, որ մեկ տարի առաջ ինչ-որ մեկն արդեն փորձել է առաջարկել նմանատիպ փոփոխություն, և այն ի սկզբանե ընդունվել է, բայց հետո անտեսվել է խոցելիության պայմանները բացահայտելուց հետո: > p2 = p1[n] = kmalloc_array(64, sizeof(u16), GFP_KERNEL); > - եթե (!p2) վերադարձնել -ENOMEM; > + եթե (!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;

Երրորդ պատչը նույնպես չընդունվեց սպասարկողի կողմից (Miquel Raynal)՝ խոցելիության հետ կապ չունեցող մեկ այլ սխալի պատճառով (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(քարտեզ, 0, sizeof(*map)); ... if (mtd_device_register(map->mtd, NULL, 0)) { map_destroy(map->mtd); քարտեզ->mtd = NULL; + pci_dev_put (pdev); դուրս գալ; }

Հետաքրքիրն այն է, որ սկզբում ենթադրվում էր, որ 4-ից 5-ը խնդիրներ ունեն, սակայն հետազոտողներն իրենք են սխալվել, և մեկ կարկատում, որը խնդրահարույց էր, նրանց կարծիքով, առաջարկվել է ճիշտ ուղղում, առանց հիշողության օգտագործման ակնկալվող պայմանների՝ ազատ հայտնվելուց հետո: err = pci_request_mem_regions (pdev, nitrox_driver_name); եթե (սխալ) { pci_disable_device (pdev); + dev_err (&pdev->dev, «Չհաջողվեց պահանջել mem տարածաշրջաններ!\n»); վերադարձի սխալ; }

Source: opennet.ru

Добавить комментарий