Grsecurity төслийн хөгжүүлэгчид Хөрвүүлэгчийн анхааруулгыг бодлогогүй арилгах нь кодын эмзэг байдалд хэрхэн хүргэж болохыг харуулсан сургамжтай түүх. Тавдугаар сарын сүүлээр цөм Linux ptrace системийн дуудлагаар дамжуулан Spectre эмзэг байдлын шинэ ашиглалтын векторын засварыг санал болгосон.
Нөхөөсийг турших явцад хөгжүүлэгчид хөрвүүлэгч нь эмхэтгэлийн явцад код болон тодорхойлолтуудыг холих талаар анхааруулга өгч байгааг анзаарсан (бүтэц нь одоо байгаа хувьсагчдад утга оноож кодын дараа тодорхойлогдсон):
int индекс = n;
хэрэв (n < HBP_NUM) { индекс = массив_индекс_носпек(индекс, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];
Линус зөвшөөрөв мастер салбар руугаа, Хувьсагчийн тодорхойлолтыг if блок руу шилжүүлснээр анхааруулга:
if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];
Долдугаар сард уг засварыг цөмийн тогтвортой салбарууд 4.4, 4.9, 4.14, 4.19, 5.2 руу шилжүүлсэн. Тогтвортой салбаруудын арчлагчид мөн анхааруулгатай тулгарсан бөгөөд энэ нь Линусын мастер салбарт аль хэдийн засагдсан эсэхийг шалгахын оронд өөрсдөө засварын ажилд хувь нэмэр оруулсан. Асуудал нь тэд энэ талаар хоёр удаа бодож байгаагүй юм. бүтцийн тодорхойлолтыг дээшлүүлснээр эмзэг байдлаас шууд хамгаалах array_index_nospec дуудлагыг бүтцийн тодорхойлолтод ашиглахаа больсон бөгөөд "index" хувьсагчийн оронд "n" хувьсагчийг үргэлж ашигласан болно:
int индекс = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[индекс];
индекс = массив_индекс_носпек(индекс, HBP_NUM);
Эх сурвалж: opennet.ru
