Linux కెర్నల్‌లో స్పెక్టర్ దుర్బలత్వానికి అసంపూర్ణ పరిష్కారానికి దారితీసింది.

Grsecurity ప్రాజెక్ట్ డెవలపర్లు పంచుకున్నారు కంపైలర్ హెచ్చరికలను ఆలోచనారహితంగా తొలగించడం కోడ్‌లోని దుర్బలత్వాలకు ఎలా దారితీస్తుందో తెలియజేసే హెచ్చరిక కథ. మే చివరిలో, ptrace సిస్టమ్ కాల్ ద్వారా స్పెక్టర్ దుర్బలత్వం యొక్క కొత్త వెక్టర్ దోపిడీ కోసం Linux కెర్నల్ కోసం ఒక పరిష్కారం ప్రతిపాదించబడింది.

ప్యాచ్‌ను పరీక్షిస్తున్నప్పుడు, డెవలపర్‌లు నిర్మాణ సమయంలో, కంపైలర్ కోడ్ మరియు నిర్వచనాలను కలపడం గురించి హెచ్చరికను ప్రదర్శిస్తుందని గమనించారు (కోడ్ తర్వాత నిర్మాణం నిర్వచించబడింది, ఇప్పటికే ఉన్న వేరియబుల్‌కు విలువను కేటాయించడం):

int సూచిక = n;
ఉంటే (n < HBP_NUM) {index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

లినస్ అంగీకరించారు దిద్దుబాటు మీ ప్రధాన శాఖకు, వదిలించుకున్నాను వేరియబుల్ డెఫినిషన్‌ను if బ్లాక్‌కి తరలించడం ద్వారా హెచ్చరిక నుండి:

అయితే (n < HBP_NUM) {int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

జూలైలో, ఫిక్స్ స్థిరమైన కెర్నల్ బ్రాంచ్‌లు 4.4, 4.9, 4.14, 4.19 మరియు 5.2కి కూడా పోర్ట్ చేయబడింది. స్థిరమైన శాఖల నిర్వాహకులు కూడా హెచ్చరికను ఎదుర్కొన్నారు మరియు లైనస్ యొక్క మాస్టర్ బ్రాంచ్‌లో ఇది ఇప్పటికే పరిష్కరించబడిందో లేదో తనిఖీ చేయడానికి బదులుగా, వారు స్వయంగా పరిష్కరించారు. సమస్య ఏమిటంటే, దాని గురించి నిజంగా ఆలోచించకుండా, వారు కేవలం తరలించబడింది నిర్మాణాన్ని నిర్వచించడం, తద్వారా దుర్బలత్వం నుండి నేరుగా రక్షణను అందించే array_index_nospec కు కాల్ ఇకపై నిర్మాణాన్ని నిర్వచించేటప్పుడు ఉపయోగించబడదు మరియు వేరియబుల్ "ఇండెక్స్"కి బదులుగా "n" వేరియబుల్ ఎల్లప్పుడూ ఉపయోగించబడుతుంది:

int సూచిక = n;
అయితే (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
సూచిక = array_index_nospec(సూచిక, HBP_NUM);

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి