Linux 5.12 цөм нь санах ойтой ажиллах үед алдаа илрүүлэх KFence дэд системийг ашигласан.

Хөгжиж буй Linux цөм 5.12 нь санах ойтой харьцах, буфер хэт ачаалагдах, суллагдсаны дараа санах ойд хандах хандалт болон ижил төрлийн бусад алдааг шалгадаг KFence (Цөмийн цахилгаан хашаа) механизмыг багтаасан болно.

Үүнтэй төстэй функц нь KASAN бүтээх сонголт хэлбэрээр цөмд аль хэдийн байсан (цөмийн хаяг ариутгагч, орчин үеийн gcc болон дуугаралт дээр Хаяг ариутгагчийг ашигладаг) - гэхдээ энэ нь ихэвчлэн дибаг хийхэд зориулагдсан байсан. KFence дэд систем нь KASAN-аас өндөр хурдаараа ялгаатай бөгөөд энэ функцийг ажлын системийн цөм дээр ч ашиглах боломжтой болгодог.

Үйлдвэрлэлийн системд ашиглах нь туршилтын явцад гарч ирдэггүй бөгөөд зөвхөн ажлын ачаалал эсвэл урт хугацааны ашиглалтын үед (их хугацаатай) гарч ирдэг санах ойн алдааг илрүүлэх боломжийг олгоно. Нэмж дурдахад KFence-ийг үйлдвэрлэлийн системд ашигласнаар санах ойтой цөмийн ажиллагааг шалгахад оролцдог машинуудын тоог мэдэгдэхүйц нэмэгдүүлэх боломжтой болно.

KFence нь хамгаалалтын хуудсуудыг тогтмол интервалтайгаар овоолон оруулснаар ачаалалаас үл хамааран хамгийн бага зардалд хүрдэг. Дараагийн хамгаалалтын интервал дууссаны дараа KFence стандарт санах ой хуваарилах системээр (SLAB эсвэл SLUB хуваарилагч) KFence объектын сангаас дараагийн хамгаалалтын хуудсыг нэмж, шинэ цагийн тоолуурын тайланг эхлүүлнэ. KFence объект бүр нь тусдаа санах ойн хуудсанд байрладаг бөгөөд зүүн болон баруун хүрээний дагуух санах ойн хуудсууд нь хамгаалалтын хуудас үүсгэдэг бөгөөд тэдгээрийн хэмжээг санамсаргүй байдлаар сонгоно.

Тиймээс объект бүхий хуудсууд нь хамгаалалтын хуудсуудаар бие биенээсээ тусгаарлагдсан бөгөөд тэдгээр нь аливаа хандалтад "хуудасны алдаа" үүсгэхээр тохируулагдсан байдаг. Объектын хуудасны доторх хил хязгаараас гадуур бичигдсэнийг илрүүлэхийн тулд санах ойн хуудасны хэмжээг зэрэгцүүлэхэд үлддэг объектуудад ашиглагдаагүй санах ойг эзэлдэг загварт суурилсан "улаан бүс"-ийг нэмж ашигладаг. —+————+————+————+————+————+— | xxxxxxxxx | О: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | Б: | xxxxxxxxx | :B | xxxxxxxxx | | x ХАМГААЛАХ x | Ж : УЛААН- | x ХАМГААЛАХ x | УЛААН- : J | x ХАМГААЛАХ x | | xxxxxxxxx | E: БҮС | xxxxxxxxx | БҮС: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | Т: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Хэрэв буферийн хил хязгаараас гадуур байгаа газар руу нэвтрэх оролдлого хийвэл үйл ажиллагаа нь хамгаалалтын хуудсанд нөлөөлдөг бөгөөд энэ нь KFence-ийг таслан зогсоож, тодорхойлсон асуудлын талаарх мэдээллийг бүртгэдэг "хуудасны алдаа" үүсэхэд хүргэдэг. Анхдагч байдлаар, KFence нь алдааг блоклодоггүй бөгөөд зөвхөн бүртгэлд анхааруулга харуулдаг боловч алдаа илэрсэн тохиолдолд цөмийг сандрах байдалд оруулах боломжийг олгодог "panic_on_warn" тохиргоо байдаг.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх