Minnesota တက္ကသိုလ်မှ အဖွဲ့တစ်ဖွဲ့သည် ပေးပို့ခဲ့သည့် အန္တရာယ်ရှိသော အပြောင်းအလဲများအကြောင်း အသေးစိတ်ကို ဖော်ပြခဲ့သည်။

အိတ်ဖွင့်ပေးစာတစ်စောင်ကို တောင်းပန်ပြီးနောက်၊ Linux kernel တွင် အပြောင်းအလဲများလက်ခံမှုကို လက်ခံသည့် Minnesota တက္ကသိုလ်မှ သုတေသီအဖွဲ့တစ်ဖွဲ့သည် Greg Croah-Hartman မှ ပိတ်ဆို့ထားသောကြောင့် kernel developer များထံပေးပို့သော patch များအကြောင်းအသေးစိတ်အချက်အလက်များကို ဖော်ပြခဲ့ပြီး ပြုပြင်ထိန်းသိမ်းသူများနှင့် စာပေးစာယူ၊ ဤဖာထေးမှုများနှင့် သက်ဆိုင်သည်။

ပြုပြင်ထိန်းသိမ်းသူများ၏ အစပျိုးမှုတွင် ပြဿနာရှိသော ဖာထေးမှုအားလုံးကို ပယ်ချခဲ့သည်၊ ဤအချက်က Greg Croah-Hartman အဘယ်ကြောင့် ဤမျှ ကြမ်းတမ်းစွာ ပြုမူခဲ့သနည်းဆိုသည်ကို ရှင်းရှင်းလင်းလင်း သိသာစေသည်၊ အဘယ်ကြောင့်ဆိုသော် အဆိုပါ ဖာထေးမှုများကို ပြုပြင်ထိန်းသိမ်းသူမှ အတည်ပြုပြီးပါက သုတေသီများ မည်သို့လုပ်ဆောင်မည်ကို မသိရသေးသောကြောင့် ဖြစ်သည်။ နောက်ကွယ်တွင်၊ ၎င်းတို့သည် bug တစ်ခုအား သတင်းပို့ရန် ရည်ရွယ်ပြီး ဖာထေးမှုများကို Git သို့သွားခွင့်မပြုခဲ့ကြောင်း အခိုင်အမာဆိုသော်လည်း အမှန်တကယ်လုပ်ဆောင်ပြီးသည်နှင့် မည်မျှဝေးကွာမည်ကို မသိရသေးပါ။

အမည်မသိလိပ်စာများမှ 2020 ခုနှစ် သြဂုတ်လတွင် စုစုပေါင်း [အီးမေးလ်ကိုကာကွယ်ထားသည်] и [အီးမေးလ်ကိုကာကွယ်ထားသည်] (James Bond မှပေးစာ) ဖာထေးမှုငါးခုကို ပေးပို့ခဲ့သည်- မှန်ကန်သော (၁၊ ၂) နှင့် ဝှက်ထားသောအမှားများ (၁၊ ၂၊ ၃) ပါဝင်သော သုံးစောင်သည် အားနည်းချက်များအတွက် အခြေအနေများကို ဖန်တီးပေးခဲ့သည်။ ဖာထေးမှုတစ်ခုစီတွင် ကုဒ်လိုင်း 1-2 လိုင်းသာပါရှိသည်။ မှားယွင်းနေသော ဖာထေးမှုများ၏ နောက်ကွယ်တွင် အဓိက အယူအဆမှာ memory ယိုစိမ့်မှုကို ပြုပြင်ခြင်းသည် နှစ်ဆ အခမဲ့ အားနည်းချက် အခြေအနေတစ်ရပ်ကို ဖန်တီးပေးနိုင်ခြင်း ဖြစ်သည်။ တစ်ပတ်အကြာတွင် Memory ပေါက်ကြားမှုများအတွက် အသေးအဖွဲပြင်ဆင်မှုများ၏ အသွင်အပြင်အောက်တွင် အားနည်းချက်များကို မြှင့်တင်နိုင်ခြေကို ဆွေးနွေးရန် အဆိုပြုချက်တစ်ခုဖြင့် kernel developer များထံ အချက်အလက်များ ပေးပို့ခဲ့သော်လည်း အန္တရာယ်ရှိသော ဖာထေးမှုများကို ပေးပို့ရန် ယခင်ကြိုးပမ်းမှုများနှင့်ပတ်သက်၍ တစ်စုံတစ်ရာ ပြောကြားခြင်းမရှိပေ။

အမှားအယွင်းရှိပါက ထိန်းချုပ်မှုမပြန်မီ kfree() သို့ ခေါ်ဆိုမှုတစ်ခုကို ပေါင်းထည့်ခြင်းဖြင့် မန်မိုရီယိုစိမ့်မှုကို ပြုပြင်ပေးသည်၊ သို့သော် လွတ်မြောက်ပြီးနောက် မမ်မိုရီဧရိယာကို ဝင်ရောက်ခြင်းအတွက် အခြေအနေများကို ဖန်တီးခဲ့သည် (အသုံးပြုပြီးနောက် အခမဲ့)။ ပြဿနာကိုဖော်ထုတ်ခဲ့သော ထိန်းသိမ်းသူ (Jiri Slaby) မှ ပယ်ချခဲ့ပြီး လွန်ခဲ့သည့်တစ်နှစ်က အလားတူပြောင်းလဲမှုတစ်ခုကို တစ်စုံတစ်ဦးမှ အဆိုပြုရန် ကြိုးစားခဲ့ပြီး ၎င်းကို ကနဦးလက်ခံခဲ့သော်လည်း အားနည်းချက်အတွက် အခြေအနေများကို ဖော်ထုတ်ပြီးနောက် ဖျက်သိမ်းခဲ့ကြောင်း ထောက်ပြခဲ့သည်။ > p2 = p1[n] = kmalloc_array(64၊ sizeof(u16), GFP_KERNEL); > - if (!p2) return -ENOMEM; > + if (!p2) { > + kfree(p1); > + return -ENOMEM; > + }

ဒုတိယ patch တွင် အခမဲ့အသုံးပြုပြီးနောက် ပြဿနာအတွက် အခြေအနေများပါရှိသည်။ list_add_tail နှင့် အခြားပြဿနာတစ်ခုကြောင့် ပြုပြင်ထိန်းသိမ်းသူ (Dan Carpenter) မှ သတ်မှတ်ထားသော patch ကို လက်မခံသော်လည်း ခေါ်ဆိုမှုတွင် အောက်ဖော်ပြပါအသုံးပြုသည့် put_device လုပ်ဆောင်ချက်တွင် "chdev" ညွှန်ပြချက်ကို သတိမထားမိခဲ့ပါ။ dev_err(&chdev ->dev..)။ သို့သော်လည်း အားနည်းချက်နှင့် မသက်ဆိုင်သော အကြောင်းပြချက်များကြောင့် patch ကို လက်မခံပါ။ if (ret < 0) { +put_device(&chdev->dev); dev_err(&chdev->dev၊ DRV_NAME ": kfifo_alloc မအောင်မြင်ပါ\n"); ret = -ENOMEM; err_fifo သို့သွားပါ။

အားနည်းချက် (pdev ကိုထည့်သွင်းရန် နှစ်ဆ ခေါ်ဆို) ကြောင့် တတိယ patch ကို ထိန်းသိမ်းသူ (Miquel Raynal) မှ လက်မခံပါ။ အကယ်၍ (!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 failed"); + pci_dev_put(pdev); ထွက်သွား } memset(မြေပုံ၊ 0၊ sizeof(*map)); ... အကယ်၍ (mtd_device_register(map->mtd၊ NULL၊ 0)) { map_destroy(map->mtd); မြေပုံ->mtd = NULL; + pci_dev_put(pdev); ထွက်သွား }

စိတ်ဝင်စားစရာကောင်းသည်မှာ၊ ဖာထေးမှု ၅ ခုတွင် ၄ ခုသည် ပြဿနာများရှိသည်ဟု ကနဦးယူဆခဲ့သော်လည်း သုတေသီများကိုယ်တိုင် အမှားလုပ်ခဲ့ပြီး ပြဿနာရှိသော ဖာထေးမှုတစ်ခုတွင် ၎င်းတို့၏အမြင်အရ၊ အခမဲ့ဖြစ်ပေါ်ပြီးနောက် မှတ်ဉာဏ်အသုံးပြုမှုအတွက် မျှော်လင့်ထားသည့်အခြေအနေများမရှိဘဲ မှန်ကန်သောပြင်ဆင်မှုကို အဆိုပြုခဲ့သည်။ အမှား = pci_request_mem_regions(pdev၊ nitrox_driver_name); အကယ်၍ (အမှား) { pci_disable_device(pdev); + dev_err(&pdev->dev၊ "mem ဒေသများကို တောင်းဆိုရန် မအောင်မြင်ပါ။\n"); ပြန်လာအမှား; }

source: opennet.ru

မှတ်ချက် Add