Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Petunjuk yang Ditandai

Mulai Android 11, untuk proses 64-bit, semua alokasi heap memiliki tag yang ditentukan implementasi yang ditetapkan di byte teratas penunjuk pada perangkat dengan dukungan kernel untuk ARM Top-byte Ignore (TBI). Setiap aplikasi yang memodifikasi tag ini dihentikan ketika tag diperiksa selama deallocation. Hal ini diperlukan untuk hardware masa depan dengan ARM Memory Tagging Ekstensi (MTE) dukungan.

Abaikan byte teratas

Fitur Abaikan Top-byte ARM tersedia untuk kode 64-bit di semua perangkat keras Armv8 AArch64. Fitur ini berarti bahwa perangkat keras mengabaikan byte atas pointer saat mengakses memori.

TBI membutuhkankernel kompatibel yang benar menangani ditandai pointer berlalu dari userspace. Android umum Kernel dari 4,14 (Pixel 4) dan fitur lebih tinggi yang diperlukan patch TBI .

Perangkat dengan dukungan TBI di kernel terdeteksi secara dinamis pada waktu mulai proses dan tag yang bergantung pada implementasi dimasukkan ke dalam byte teratas pointer untuk semua alokasi heap. Setelah ini, pemeriksaan dijalankan untuk memastikan tag tidak terpotong saat membatalkan alokasi memori.

Kesiapan Ekstensi Penandaan Memori

Memory Tagging Extension (MTE) ARM membantu mengatasi masalah keamanan memori. MTE bekerja dengan penandaan ke-56-59 bit alamat masing-masing alokasi memori pada stack, heap, dan GLOBALS. Perangkat keras dan set instruksi secara otomatis memeriksa bahwa tag yang benar digunakan pada setiap akses memori.

Aplikasi Android yang tidak benar menyimpan informasi di atas byte dari pointer dijamin untuk istirahat pada perangkat MTE-enabled. Penunjuk yang diberi tag memudahkan untuk mendeteksi dan menolak penggunaan byte atas penunjuk yang salah sebelum perangkat MTE tersedia.

Dukungan pengembang

Jika aplikasi Anda mogok dan Anda dimintai tautan ini, itu bisa berarti salah satu dari berikut ini:

  1. Aplikasi mencoba membebaskan penunjuk yang tidak dialokasikan oleh pengalokasi tumpukan sistem.
  2. Sesuatu di aplikasi Anda memodifikasi byte teratas dari sebuah pointer. Byte atas penunjuk tidak dapat dimodifikasi dan kode Anda perlu diubah untuk memperbaiki masalah ini.

Contoh pointer byte atas yang salah digunakan atau dimodifikasi.

  • Pointer ke tipe tertentu memiliki metadata khusus aplikasi yang disimpan di 16 bit alamat teratas.
  • Sebuah pointer dilemparkan ke ganda dan kemudian kembali, kehilangan bit alamat yang lebih rendah.
  • Kode yang menghitung perbedaan antara alamat variabel lokal dari bingkai tumpukan yang berbeda sebagai cara untuk mengukur kedalaman rekursi.

Beberapa aplikasi mungkin bergantung pada pustaka yang berperilaku tidak benar saat byte atas penunjuk disetel. Kami menyadari bahwa mungkin tidak sepele untuk memperbaiki masalah mendasar ini di perpustakaan dengan cepat. Dengan demikian, aplikasi yang menggunakan targetSdkLevel < 30 tidak akan memiliki pointer penandaan diaktifkan secara default. Kami juga menyediakan pintu keluar darurat untuk aplikasi yang dibangun dengan targetSdkLevel >= 30 untuk memudahkan masa transisi.

Pintu keluar darurat digunakan dengan menambahkan berikut untuk Anda AndroidManifest.xml berkas:

  <application android:allowNativeHeapPointerTagging="false">
  ...
  </application>

Ini akan menonaktifkan fitur Pointer Tagging untuk aplikasi Anda. Harap dicatat bahwa ini tidak mengatasi masalah kesehatan kode yang mendasari. Pintu keluar darurat ini akan hilang dalam versi masa depan Android, karena masalah alam ini akan bertentangan dengan MTE .