Linux 5.12 kernel เป„เบ”เป‰เบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเบฅเบฐเบšเบปเบšเบเปˆเบญเบ KFence เป€เบžเบทเปˆเบญเบเบงเบ”เบžเบปเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

ะ’ ัะพัั‚ะฐะฒ ะฝะฐั…ะพะดัั‰ะตะณะพัั ะฒ ั€ะฐะทั€ะฐะฑะพั‚ะบะต ัะดั€ะฐ Linux 5.12 ะฒะบะปัŽั‡ะตะฝะฐ ั€ะตะฐะปะธะทะฐั†ะธั ะผะตั…ะฐะฝะธะทะผะฐ KFence (Kernel Electric Fence), ะบะพั‚ะพั€ั‹ะน ะฟั€ะพะฒะตั€ัะตั‚ ั€ะฐะฑะพั‚ัƒ ั ะฟะฐะผัั‚ัŒัŽ, ะพั‚ะปะฐะฒะปะธะฒะฐั ะฒั‹ั…ะพะด ะทะฐ ะณั€ะฐะฝะธั†ั‹ ะฑัƒั„ะตั€ะพะฒ, ะพะฑั€ะฐั‰ะตะฝะธั ะบ ะฟะฐะผัั‚ะธ ะฟะพัะปะต ะพัะฒะพะฑะพะถะดะตะฝะธั ะธ ะดั€ัƒะณะธะต ะพัˆะธะฑะบะธ ะฟะพะดะพะฑะฝะพะณะพ ะบะปะฐััะฐ.

ะŸะพะดะพะฑะฝะฐั ั„ัƒะฝะบั†ะธะพะฝะฐะปัŒะฝะพัั‚ัŒ ัƒะถะต ะฟั€ะธััƒั‚ัั‚ะฒะพะฒะฐะปะฐ ะฒ ัะดั€ะต ะฒ ะฒะธะดะต ะพะฟั†ะธะธ ัะฑะพั€ะบะธ KASAN (kernel address sanitizer, ะธัะฟะพะปัŒะทัƒะตั‚ Address Sanitizer ะฒ ัะพะฒั€ะตะผะตะฝะฝั‹ั… gcc ะธ clang) โ€” ะพะดะฝะฐะบะพ ะฟะพะทะธั†ะธะพะฝะธั€ะพะฒะฐะปะฐััŒ ะฒ ะพัะฝะพะฒะฝะพะผ ะดะปั ะพั‚ะปะฐะดะพั‡ะฝะพะณะพ ะฟั€ะธะผะตะฝะตะฝะธั. ะŸะพะดัะธัั‚ะตะผะฐ KFence ะพั‚ะปะธั‡ะฐะตั‚ัั ะพั‚ KASAN ะฒั‹ัะพะบะพะน ัะบะพั€ะพัั‚ัŒัŽ ั€ะฐะฑะพั‚ั‹, ั‡ั‚ะพ ะฟะพะทะฒะพะปัะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ัั‚ัƒ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะดะฐะถะต ะฝะฐ ัะดั€ะฐั… ะฒ ั€ะฐะฑะพั‡ะธั… ัะธัั‚ะตะผะฐั….

ะŸั€ะธะผะตะฝะตะฝะธะต ะฝะฐ ั€ะฐะฑะพั‡ะธั… ัะธัั‚ะตะผะฐั… ะดะฐัั‚ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะพั‚ะปะฐะฒะปะธะฒะฐั‚ัŒ ะพัˆะธะฑะบะธ ั€ะฐะฑะพั‚ั‹ ั ะฟะฐะผัั‚ัŒัŽ, ะบะพั‚ะพั€ั‹ะต ะฝะต ะฟั€ะพัะฒะปััŽั‚ัั ะฒ ั‚ะตัั‚ะพะฒั‹ั… ะทะฐะฟัƒัะบะฐั… ะธ ะฒัะฟะปั‹ะฒะฐัŽั‚ ั‚ะพะปัŒะบะพ ะฝะฐ ั€ะฐะฑะพั‡ะธั… ะฝะฐะณั€ัƒะทะบะฐั… ะธะปะธ ะฟั€ะธ ะดะปะธั‚ะตะปัŒะฝะพะน ั€ะฐะฑะพั‚ะต (ะฟั€ะธ ะฑะพะปัŒัˆะพะผ uptime). ะšั€ะพะผะต ั‚ะพะณะพ, ะฟั€ะธะผะตะฝะตะฝะธะต KFence ะฝะฐ ั€ะฐะฑะพั‡ะธั… ัะธัั‚ะตะผะฐั… ะดะฐัั‚ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ััƒั‰ะตัั‚ะฒะตะฝะฝะพ ัƒะฒะตะปะธั‡ะธั‚ัŒ ั‡ะธัะปะพ ะผะฐัˆะธะฝ, ะฒะพะฒะปะตั‡ั‘ะฝะฝั‹ั… ะฒ ะฟั€ะพะฒะตั€ะบัƒ ั€ะฐะฑะพั‚ั‹ ัะดั€ะฐ ั ะฟะฐะผัั‚ัŒัŽ.

ะœะธะฝะธะผะฐะปัŒะฝั‹ะต ะฝะฐะบะปะฐะดะฝั‹ะต ั€ะฐัั…ะพะดั‹, ะฝะต ะทะฐะฒะธััั‰ะธะต ะพั‚ ะฝะฐะณั€ัƒะทะบะธ, ะดะพัั‚ะธะณะฐัŽั‚ัั ะฒ KFence ะฑะปะฐะณะพะดะฐั€ั ะฟะพะดัั‚ะฐะฝะพะฒะบะต ัั‚ั€ะฐะฝะธั† ะทะฐั‰ะธั‚ั‹ (guard pages) ะฒ ะบัƒั‡ัƒ ั‡ะตั€ะตะท ั„ะธะบัะธั€ะพะฒะฐะฝะฝั‹ะต ะธะฝั‚ะตั€ะฒะฐะปั‹. ะŸะพัะปะต ะธัั‚ะตั‡ะตะฝะธั ะฒั€ะตะผะตะฝะธ ะพั‡ะตั€ะตะดะฝะพะณะพ ะธะฝั‚ะตั€ะฒะฐะปะฐ ะทะฐั‰ะธั‚ั‹ KFence ั‡ะตั€ะตะท ัˆั‚ะฐั‚ะฝัƒัŽ ัะธัั‚ะตะผัƒ ั€ะฐัะฟั€ะตะดะตะปะตะฝะธั ะฟะฐะผัั‚ะธ (SLAB ะธะปะธ SLUB allocator) ะดะพะฑะฐะฒะปัะตั‚ ะพั‡ะตั€ะตะดะฝัƒัŽ ัั‚ั€ะฐะฝะธั†ัƒ ะทะฐั‰ะธั‚ั‹ ะธะท ะฟัƒะปะฐ ะพะฑัŠะตะบั‚ะพะฒ KFence, ะธ ะฝะฐั‡ะธะฝะฐะตั‚ ะฝะพะฒั‹ะน ะพั‚ั‡ั‘ั‚ ัั‡ั‘ั‚ั‡ะธะบะฐ ะฒั€ะตะผะตะฝะธ. ะšะฐะถะดั‹ะน ะพะฑัŠะตะบั‚ KFence ั€ะฐะทะผะตั‰ะฐะตั‚ัั ะฒ ะพั‚ะดะตะปัŒะฝะพะน ัั‚ั€ะฐะฝะธั†ะต ะฟะฐะผัั‚ะธ, ะฐ ัั‚ั€ะฐะฝะธั†ั‹ ะฟะฐะผัั‚ะธ ะฟะพ ะปะตะฒะพะน ะธ ะฟั€ะฐะฒะพะน ะณั€ะฐะฝะธั†ะต ะพะฑั€ะฐะทัƒัŽั‚ ัั‚ั€ะฐะฝะธั†ั‹ ะทะฐั‰ะธั‚ั‹ (guard pages), ั€ะฐะทะผะตั€ ะบะพั‚ะพั€ั‹ั… ะฒั‹ะฑะธั€ะฐะตั‚ัั ัะปัƒั‡ะฐะนะฝะพ.

ะขะฐะบะธะผ ะพะฑั€ะฐะทะพะผ, ัั‚ั€ะฐะฝะธั†ั‹ ั ะพะฑัŠะตะบั‚ะฐะผะธ ะพั‚ะดะตะปััŽั‚ัั ะดั€ัƒะณ ะพั‚ ะดั€ัƒะณะฐ ัั‚ั€ะฐะฝะธั†ะฐะผะธ ะทะฐั‰ะธั‚ั‹, ะบะพั‚ะพั€ั‹ะต ะฝะฐัั‚ั€ะฐะธะฒะฐัŽั‚ัั ะฝะฐ ะณะตะฝะตั€ะฐั†ะธัŽ ยซpage faultยป ะฟั€ะธ ะปัŽะฑะพะผ ะพะฑั€ะฐั‰ะตะฝะธะธ. ะ”ะปั ะฒั‹ัะฒะปะตะฝะธั ะพะฟะตั€ะฐั†ะธะน ะทะฐะฟะธัะธ ะทะฐ ะณั€ะฐะฝะธั†ัƒ ะฑัƒั„ะตั€ะฐ ะฒะฝัƒั‚ั€ะธ ัั‚ั€ะฐะฝะธั† ั ะพะฑัŠะตะบั‚ะฐะผะธ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝะพ ะธัะฟะพะปัŒะทัƒัŽั‚ัั ยซะบั€ะฐัะฝั‹ะต ะทะพะฝั‹ยป ะฝะฐ ะพัะฝะพะฒะต ัˆะฐะฑะปะพะฝะพะฒ, ะบะพั‚ะพั€ั‹ะต ะทะฐะฝะธะผะฐัŽั‚ ะฟะฐะผัั‚ัŒ, ะฝะต ะธัะฟะพะปัŒะทัƒะตะผัƒัŽ ะพะฑัŠะตะบั‚ะฐะผะธ, ะพัั‚ะฐัŽั‰ัƒัŽัั ะฟั€ะธ ะฒั‹ั€ะฐะฒะฝะธะฒะฐะฝะธะธ ั€ะฐะทะผะตั€ะฐ ัั‚ั€ะฐะฝะธั† ะฟะฐะผัั‚ะธ. โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€” | xxxxxxxxx | O : | xxxxxxxxx | : O | xxxxxxxxx | | xxxxxxxxx | B : | xxxxxxxxx | : B | xxxxxxxxx | | x GUARD x | J : RED- | x GUARD x | RED- : J | x GUARD x | | xxxxxxxxx | E : ZONE | xxxxxxxxx | ZONE : E | xxxxxxxxx | | xxxxxxxxx | C : | xxxxxxxxx | : C | xxxxxxxxx | | xxxxxxxxx | T : | xxxxxxxxx | : T | xxxxxxxxx | โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”โ€”โ€”โ€”+โ€”

ะ’ ัะปัƒั‡ะฐะต ะฟะพะฟั‹ั‚ะบะธ ะพะฑั€ะฐั‰ะตะฝะธั ะบ ะพะฑะปะฐัั‚ะธ ะฒะฝะต ะณั€ะฐะฝะธั† ะฑัƒั„ะตั€ะฐ ะพะฟะตั€ะฐั†ะธั ะทะฐั‚ั€ะฐะณะธะฒะฐะตั‚ ัั‚ั€ะฐะฝะธั†ัƒ ะทะฐั‰ะธั‚ั‹, ั‡ั‚ะพ ะฟั€ะธะฒะพะดะธั‚ ะบ ะณะตะฝะตั€ะฐั†ะธะธ ยซpage faultยป, ะบะพั‚ะพั€ั‹ะน ะฟะตั€ะตั…ะฒะฐั‚ั‹ะฒะฐะตั‚ KFence ะธ ะฒั‹ะฒะพะดะธั‚ ะฒ ะปะพะณ ะดะฐะฝะฝั‹ะต ะพ ะฒั‹ัะฒะปะตะฝะฝะพะน ะฟั€ะพะฑะปะตะผะต. ะŸะพ ัƒะผะพะปั‡ะฐะฝะธัŽ KFence ะฝะต ะฑะปะพะบะธั€ัƒะตั‚ ะพัˆะธะฑะบัƒ ะธ ะปะธัˆัŒ ะฒั‹ะฒะพะดะธั‚ ะฟั€ะตะดัƒะฟั€ะตะถะดะตะฝะธะต ะฒ ะปะพะณ, ะฝะพ ะฟั€ะตะดัƒัะผะพั‚ั€ะตะฝะฐ ะฝะฐัั‚ั€ะพะนะบะฐ ยซpanic_on_warnยป, ะฟะพะทะฒะพะปััŽั‰ะฐั ะฒ ัะปัƒั‡ะฐะต ะฒั‹ัะฒะปะตะฝะธั ะพัˆะธะฑะบะธ ะฟะตั€ะตะฒะพะดะธั‚ัŒ ัะดั€ะพ ะฒ ัะพัั‚ะพัะฝะธะต ะบั€ะฐั…ะฐ (panic).

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™