మెమరీతో పని చేస్తున్నప్పుడు లోపాలను గుర్తించడానికి Linux 5.12 కెర్నల్ KFence సబ్‌సిస్టమ్‌ను స్వీకరించింది.

అభివృద్ధిలో ఉన్న Linux కెర్నల్ 5.12, KFence (కెర్నల్ ఎలక్ట్రిక్ ఫెన్స్) మెకానిజం యొక్క అమలును కలిగి ఉంది, ఇది మెమరీ హ్యాండ్లింగ్, క్యాచింగ్ బఫర్ ఓవర్‌రన్‌లు, ఫ్రీయింగ్ తర్వాత మెమరీ యాక్సెస్‌లు మరియు ఇదే తరగతిలోని ఇతర ఎర్రర్‌లను తనిఖీ చేస్తుంది.

KASAN బిల్డ్ ఎంపిక (కెర్నల్ అడ్రస్ శానిటైజర్, ఆధునిక gcc మరియు క్లాంగ్‌లో అడ్రస్ శానిటైజర్‌ని ఉపయోగిస్తుంది) రూపంలో కెర్నల్‌లో ఇలాంటి కార్యాచరణ ఇప్పటికే ఉంది - అయినప్పటికీ, ఇది ప్రధానంగా డీబగ్గింగ్ ఉపయోగం కోసం ఉంచబడింది. KFence ఉపవ్యవస్థ దాని అధిక ఆపరేటింగ్ వేగంతో KASAN నుండి భిన్నంగా ఉంటుంది, ఇది పని చేసే సిస్టమ్‌లలోని కోర్లలో కూడా ఈ లక్షణాన్ని ఉపయోగించడం సాధ్యపడుతుంది.

ఉత్పాదక వ్యవస్థలలోని అప్లికేషన్ టెస్ట్ రన్‌లలో కనిపించని మెమరీ లోపాలను క్యాచ్ చేయడం సాధ్యపడుతుంది మరియు పనిభారం సమయంలో లేదా దీర్ఘకాలిక ఆపరేషన్ సమయంలో (పెద్ద సమయ వ్యవధితో) మాత్రమే కనిపిస్తుంది. అదనంగా, ఉత్పత్తి వ్యవస్థలపై KFence ఉపయోగం మెమరీతో కెర్నల్ యొక్క ఆపరేషన్‌ను తనిఖీ చేయడంలో పాల్గొనే యంత్రాల సంఖ్యను గణనీయంగా పెంచడం సాధ్యం చేస్తుంది.

KFence నిర్ణీత వ్యవధిలో గార్డు పేజీలను హీప్‌లోకి చొప్పించడం ద్వారా కనిష్ట లోడ్-ఇండిపెండెంట్ ఓవర్‌హెడ్‌ను సాధిస్తుంది. తదుపరి రక్షణ విరామం గడువు ముగిసిన తర్వాత, KFence, ప్రామాణిక మెమరీ కేటాయింపు వ్యవస్థ (SLAB లేదా SLUB కేటాయింపు) ద్వారా, KFence ఆబ్జెక్ట్ పూల్ నుండి తదుపరి రక్షణ పేజీని జోడిస్తుంది మరియు కొత్త సమయ కౌంటర్ నివేదికను ప్రారంభిస్తుంది. ప్రతి KFence ఆబ్జెక్ట్ ప్రత్యేక మెమరీ పేజీలో ఉంది మరియు ఎడమ మరియు కుడి సరిహద్దుల వెంట ఉన్న మెమరీ పేజీలు గార్డు పేజీలను ఏర్పరుస్తాయి, వాటి పరిమాణం యాదృచ్ఛికంగా ఎంపిక చేయబడుతుంది.

అందువల్ల, వస్తువులతో ఉన్న పేజీలు రక్షణ పేజీల ద్వారా ఒకదానికొకటి వేరు చేయబడతాయి, ఇవి ఏదైనా యాక్సెస్‌పై “పేజీ తప్పు” సృష్టించడానికి కాన్ఫిగర్ చేయబడతాయి. ఆబ్జెక్ట్ పేజీల లోపల సరిహద్దు వెలుపల వ్రాతలను గుర్తించడానికి, నమూనా-ఆధారిత "రెడ్ జోన్‌లు" అదనంగా ఉపయోగించబడతాయి, ఇవి ఆబ్జెక్ట్‌లు ఉపయోగించని మెమరీని ఆక్రమిస్తాయి, మెమరీ పేజీల పరిమాణాన్ని సమలేఖనం చేసినప్పుడు మిగిలి ఉన్నాయి. —+————+————+———+———+—————+— | xxxxxxxx | O: | xxxxxxxx | :O | xxxxxxxx | | xxxxxxxx | బి: | xxxxxxxx | :B | xxxxxxxx | | x గార్డ్ x | J : RED- | x గార్డ్ x | RED- : J | x గార్డ్ x | | xxxxxxxx | ఇ: జోన్ | xxxxxxxx | జోన్: E | xxxxxxxx | | xxxxxxxx | సి: | xxxxxxxx | :సి | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | : T | xxxxxxxx | —+————+————+———+———+————+—+—

బఫర్ సరిహద్దుల వెలుపల ఉన్న ప్రాంతాన్ని యాక్సెస్ చేయడానికి ప్రయత్నించినట్లయితే, ఆపరేషన్ రక్షణ పేజీని ప్రభావితం చేస్తుంది, ఇది "పేజీ తప్పు" ఉత్పత్తికి దారి తీస్తుంది, ఇది KFenceని అడ్డుకుంటుంది మరియు గుర్తించిన సమస్య గురించి సమాచారాన్ని లాగ్ చేస్తుంది. డిఫాల్ట్‌గా, KFence లోపాన్ని నిరోధించదు మరియు లాగ్‌లో హెచ్చరికను మాత్రమే ప్రదర్శిస్తుంది, అయితే లోపం గుర్తించబడితే కెర్నల్‌ను తీవ్ర భయాందోళన స్థితిలో ఉంచడానికి మిమ్మల్ని అనుమతించే “panic_on_warn” సెట్టింగ్ ఉంది.

మూలం: opennet.ru

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