Kernel Linux 5.12 wis nggunakake subsistem KFence kanggo ndeteksi kesalahan nalika nggarap memori

Kernel Linux 5.12, sing lagi dikembangake, kalebu implementasi mekanisme KFence (Kernel Electric Fence), sing mriksa penanganan memori, nyekel overruns buffer, akses memori sawise dibebasake, lan kesalahan liyane saka kelas sing padha.

Fungsi sing padha wis ana ing kernel ing bentuk pilihan mbangun KASAN (sanitizer alamat kernel, nggunakake Address Sanitizer ing gcc modern lan clang) - nanging, dipanggonke utamane kanggo panggunaan debugging. Subsistem KFence beda karo KASAN kanthi kecepatan operasi sing dhuwur, sing ndadekake fitur iki bisa digunakake sanajan ing inti ing sistem kerja.

Aplikasi ing sistem produksi bakal bisa kanggo nyekel kasalahan memori sing ora katon ing test run lan mung katon sak workloads utawa sak operasi long-term (karo uptime gedhe). Kajaba iku, panggunaan KFence ing sistem produksi bakal bisa nambah jumlah mesin sing melu mriksa operasi kernel kanthi memori.

KFence entuk overhead bebas beban minimal kanthi nglebokake kaca penjaga menyang tumpukan kanthi interval tetep. Sawise interval pangayoman sabanjuré wis kadaluwarsa, KFence, liwat sistem alokasi memori standar (SLAB utawa SLUB allocator), nambah kaca pangayoman sabanjuré saka blumbang obyek KFence, lan miwiti laporan counter wektu anyar. Saben obyek KFence dumunung ing kaca memori sing kapisah, lan kaca memori ing sadawane wates kiwa lan tengen mbentuk kaca penjaga, ukuran sing dipilih kanthi acak.

Mangkono, kaca kanthi obyek dipisahake saka siji liyane kanthi kaca proteksi, sing dikonfigurasi kanggo ngasilake "kaca fault" ing sembarang akses. Kanggo ndeteksi metu-saka-wates nulis ing kaca obyek, basis pola "zona abang" tambahan digunakake, kang Occupy memori ora digunakake dening obyek, isih nalika ukuran kaca memori didadekake siji. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | : O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x WARGA x | J : RED- | x WARGA x | RED- : J | x WARGA x | | xxxxxxxxx | E: ZON | xxxxxxxxx | ZON: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Yen nyoba kanggo ngakses wilayah njaba wates buffer, operasi mengaruhi kaca pangayoman, kang ndadékaké kanggo generasi "kaca fault", kang nyegat KFence lan log informasi bab masalah dideteksi. Kanthi gawan, KFence ora mblokir kesalahan lan mung nampilake bebaya ing log, nanging ana setelan "panic_on_warn" sing ngidini sampeyan nglebokake kernel dadi panik yen kesalahan dideteksi.

Source: opennet.ru

Add a comment