Нагли поправка резултирала је непотпуном исправком за Спецтре рањивост у Линук кернелу

Програмери пројекта Грсецурити заједнички упозоравајућа прича која показује како немарно елиминисање упозорења компајлера може довести до рањивости у коду. Крајем маја, за Линук кернел, предложена је исправка за нови вектор експлоатације рањивости Спецтре преко птраце системског позива.

У процесу тестирања закрпе, програмери су приметили да при изградњи компајлер приказује упозорење о мешању кода и дефиниција (структура је дефинисана након кода са додељивањем вредности постојећој променљивој):

инт индекс = н;
иф (н < ХБП_НУМ) { индек = арраи_индек_носпец(индек, ХБП_НУМ); струцт перф_евент *бп = тхреад->птраце_бпс[индекс];

Линус је прихватио корекција на своју главну грану, ослобађање од из упозорења умотавањем дефиниције променљиве у блок иф:

иф (н < ХБП_НУМ) { инт индек = арраи_индек_носпец(н, ХБП_НУМ); струцт перф_евент *бп = тхреад->птраце_бпс[индекс];

У јулу, исправка је такође портована на стабилне гране кернела 4.4, 4.9, 4.14, 4.19 и 5.2. Одржавачи стабилне су такође наишли на упозорење и уместо да провере да ли је већ поправљено у Линусовој мастер грани, сами су га закрпили. Проблем је што су они, без много размишљања, само преселио дефиниција структуре горе, тако да се позив арраи_индек_носпец, који директно обезбеђује заштиту од рањивости, више не користи у дефиницији структуре, а уместо променљиве „индек“ увек се користи променљива „н“:

инт индекс = н;
иф (н < ХБП_НУМ ){ струцт перф_евент *бп = тхреад->птраце_бпс[индек];
индек = арраи_индек_носпец(индек, ХБП_НУМ);

Извор: опеннет.ру

Додај коментар