هڪ ريش فڪس جي نتيجي ۾ لينڪس ڪنيل ۾ اسپيڪٽر جي ڪمزوري لاءِ نامڪمل حل ٿي ويو

Grsecurity پروجيڪٽ جا ڊولپر گڏيل هڪ احتياطي ڪهاڻي جيڪا ظاهر ڪري ٿي ته ڪيئن مرتب ڪندڙ ڊيڄاريندڙن جي لاپرواهي ختم ٿيڻ سان ڪوڊ ۾ ڪمزورين جو سبب بڻجي سگهي ٿو. مئي جي آخر ۾، لينڪس ڪنييل لاء، ptrace سسٽم ڪال ذريعي اسپيڪر جي نقصان جي استحصال جي نئين ویکٹر لاء هڪ تجويز پيش ڪيو ويو.

پيچ کي جانچڻ جي عمل ۾، ڊولپرز اهو محسوس ڪيو ته تعمير ڪرڻ وقت، گڏ ڪرڻ وارو ڪوڊ ۽ وصفن کي گڏ ڪرڻ جي باري ۾ هڪ ڊيڄاريندڙ ڏيکاري ٿو (ڍانچي جي وضاحت ڪئي وئي ڪوڊ کان پوء هڪ موجوده متغير کي قيمت ڏيڻ سان):

int index = n؛
جيڪڏهن (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM)؛ struct perf_event *bp = موضوع->ptrace_bps[انڊيڪس]؛

لينس قبول ڪيو اصلاح توهان جي ماسٽر برانچ ڏانهن، نجات حاصل ڪرڻ هڪ if بلاڪ ۾ متغير تعريف کي لپائڻ سان ڊيڄاريندڙ کان:

جيڪڏهن (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM)؛ struct perf_event *bp = موضوع->ptrace_bps[انڊيڪس]؛

جولاء ۾، فيڪس پڻ 4.4، 4.9، 4.14، 4.19، ۽ 5.2 مستحڪم ڪنييل شاخن ڏانهن پورٽ ڪيو ويو. مستحڪم سنڀاليندڙن کي پڻ ڊيڄاريندڙن سان منهن ڏيڻو پيو، ۽ ڏسڻ جي بدران ته اهو اڳ ۾ ئي لينس جي ماسٽر برانچ ۾ مقرر ڪيو ويو آهي، انهن پاڻ کي پيچ ڪيو. مسئلو اهو آهي ته اهي، بغير ڪنهن سوچ جي، بس منتقل ڪيو ويو ساخت جي تعريف مٿي، ته جيئن array_index_nospec ڏانهن ڪال، جيڪو سڌو سنئون نقصان جي خلاف تحفظ فراهم ڪري ٿو، هاڻي ساخت جي تعريف ۾ استعمال نه ڪيو ويو آهي، ۽ "انڊيڪس" متغير جي بدران، "n" متغير هميشه استعمال ڪيو ويو:

int index = n؛
جيڪڏهن (n <HBP_NUM) { struct perf_event *bp = thread->ptrace_bps[انڊيڪس]؛
index = array_index_nospec (انڊيڪس، HBP_NUM)؛

جو ذريعو: opennet.ru

تبصرو شامل ڪريو