Gisagop sa Linux 5.12 kernel ang KFence subsystem aron makit-an ang mga sayup kung nagtrabaho gamit ang memorya

Ang Linux kernel 5.12, nga anaa sa pag-uswag, naglakip sa pagpatuman sa KFence (Kernel Electric Fence) nga mekanismo, nga nagsusi sa pagdumala sa memorya, pagdakop sa mga buffer overruns, pag-access sa memorya human sa pagpagawas, ug uban pang mga sayop sa susamang klase.

Ang parehas nga pag-andar naa na sa kernel sa porma sa kapilian sa pagtukod sa KASAN (kernel address sanitizer, naggamit sa Address Sanitizer sa modernong gcc ug clang) - bisan pa, kini gipahimutang sa panguna alang sa paggamit sa pag-debug. Ang KFence subsystem lahi sa KASAN sa taas nga operating speed niini, nga nagpaposible sa paggamit niini nga feature bisan sa mga core sa working system.

Ang aplikasyon sa mga sistema sa produksiyon magpaposible sa pagdakop sa mga sayup sa panumduman nga dili makita sa mga pagdagan sa pagsulay ug makita lamang sa panahon sa mga karga sa trabaho o sa panahon sa dugay nga operasyon (nga adunay daghang oras sa pagtrabaho). Dugang pa, ang paggamit sa KFence sa mga sistema sa produksiyon magpaposible nga madugangan ang gidaghanon sa mga makina nga nahilambigit sa pagsusi sa operasyon sa kernel nga adunay memorya.

Ang KFence nakab-ot ang gamay nga load-independent nga overhead pinaagi sa pagsal-ot sa mga panid sa guwardiya ngadto sa pundok sa mga fixed interval. Human matapos ang sunod nga agwat sa pagpanalipod, ang KFence, pinaagi sa standard nga sistema sa alokasyon sa panumduman (SLAB o SLUB allocator), modugang sa sunod nga panid sa pagpanalipod gikan sa KFence object pool, ug magsugod ug bag-ong time counter report. Ang matag butang sa KFence nahimutang sa usa ka bulag nga panid sa panumduman, ug ang mga panid sa panumduman ubay sa wala ug tuo nga mga utlanan nagporma mga panid sa bantay, ang gidak-on niini gipili nga random.

Sa ingon, ang mga panid nga adunay mga butang gibulag gikan sa usag usa pinaagi sa mga panid sa pagpanalipod, nga gi-configure aron makamugna usa ka "fault sa panid" sa bisan unsang pag-access. Aron mahibal-an ang mga operasyon sa pagsulat sa gawas sa sulod sa mga panid sa butang, gigamit usab ang gibase sa pattern nga "pula nga mga sona", nga nag-okupar sa panumduman nga wala gigamit sa mga butang, nga nahabilin kung ang gidak-on sa mga panid sa panumduman gi-align. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x BANTAY x | J : PULA- | x BANTAY x | PULA- : J | x BANTAY x | | xxxxxxxxx | E: SONA | xxxxxxxxx | SONA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Kung ang usa ka pagsulay gihimo aron ma-access ang usa ka lugar sa gawas sa mga utlanan sa buffer, ang operasyon makaapekto sa panid sa pagpanalipod, nga mosangput sa pagmugna sa usa ka "fault sa panid", nga makapugong sa KFence ug mag-log sa kasayuran bahin sa nakit-an nga problema. Sa kasagaran, ang KFence dili makababag sa usa ka sayup ug nagpakita lamang sa usa ka pasidaan sa log, apan adunay usa ka setting nga "panic_on_warn" nga nagtugot kanimo sa pagbutang sa kernel ngadto sa usa ka panic state kung adunay usa ka sayup nga makita.

Source: opennet.ru

Idugang sa usa ka comment