Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

المؤشرات الموسومة

بدءًا من Android 11 ، بالنسبة لعمليات 64 بت ، تحتوي جميع عمليات تخصيص الكومة على علامة تنفيذ محددة تم تعيينها في البايت العلوي من المؤشر على الأجهزة التي تدعم kernel لـ ARM Top-byte Ignore (TBI). يتم إنهاء أي تطبيق يعدل هذه العلامة عند فحص العلامة أثناء إلغاء التخصيص. يعد هذا ضروريًا للأجهزة المستقبلية التي تدعم ARM Memory Tagging Extension (MTE).

تجاهل أعلى بايت

تتوفر ميزة تجاهل Top-byte في ARM لرمز 64 بت في جميع أجهزة Armv8 AArch64. تعني هذه الميزة أن الجهاز يتجاهل البايت العلوي للمؤشر عند الوصول إلى الذاكرة.

يتطلب TBIنواة متوافقة تتعامل بشكل صحيح مع المؤشرات ذات العلامات التي تم تمريرها من مساحة المستخدمين. تتميز Android Common Kernels من 4.14 (Pixel 4) والإصدارات الأحدث بتصحيحات TBI المطلوبة.

يتم اكتشاف الأجهزة التي تدعم TBI في kernel ديناميكيًا في وقت بدء العملية ويتم إدخال علامة تعتمد على التنفيذ في البايت العلوي من المؤشر لجميع عمليات تخصيص الكومة. بعد ذلك ، يتم إجراء فحص للتأكد من عدم قطع العلامة عند إلغاء تخصيص الذاكرة.

استعداد تمديد علامات الذاكرة

يساعد ملحق وضع العلامات على الذاكرة (MTE) في ARM على معالجة مشكلات أمان الذاكرة. تعمل MTE عن طريق وضع علامات على بتات العنوان 56th-59th لكل تخصيص للذاكرة في المكدس ، والكومة ، والكرة الأرضية. تتحقق مجموعة الأجهزة والتعليمات تلقائيًا من استخدام العلامة الصحيحة عند كل وصول إلى الذاكرة.

تطبيقات Android التي تخزن المعلومات بشكل غير صحيح في أعلى بايت من المؤشر مضمونة للكسر على جهاز يدعم MTE . تعمل المؤشرات ذات العلامات على تسهيل اكتشاف الاستخدامات غير الصحيحة للبايت العلوي من المؤشر ورفضها قبل توفر أجهزة MTE.

دعم المطور

إذا تعطل تطبيقك وتمت مطالبتك بهذا الرابط ، فقد يعني ذلك واحدًا مما يلي:

  1. حاول التطبيق تحرير مؤشر لم يتم تخصيصه بواسطة مخصص كومة النظام.
  2. شيء ما في تطبيقك قام بتعديل البايت العلوي للمؤشر. لا يمكن تعديل البايت العلوي للمؤشر ويجب تغيير الرمز الخاص بك لإصلاح هذه المشكلة.

أمثلة على استخدام أو تعديل مؤشر البايت العلوي بشكل غير صحيح.

  • تحتوي المؤشرات الخاصة بنوع معين على بيانات وصفية خاصة بالتطبيق مخزنة في أفضل 16 بت عنوان.
  • يتم توجيه المؤشر إلى الضعف ثم العودة ، مما يؤدي إلى فقدان بتات العنوان السفلية.
  • رمز يحسب الفرق بين عناوين المتغيرات المحلية من إطارات مكدس مختلفة كطريقة لقياس عمق العودية.

قد تعتمد بعض التطبيقات على المكتبات التي تتصرف بشكل غير صحيح عند تعيين البايت العلوي للمؤشر. نحن ندرك أنه قد يكون من غير الضروري إصلاح هذه المشكلات الأساسية في المكتبات بسرعة. على هذا النحو ، لن يتم تمكين علامات المؤشر افتراضيًا على التطبيقات التي تستخدم targetSdkLevel < 30 . نوفر أيضًا فتحة هروب للتطبيقات التي تم إنشاؤها باستخدام targetSdkLevel >= 30 لتسهيل الفترة الانتقالية.

يتم استخدام فتحة الهروب عن طريق إضافة ما يلي إلى ملف AndroidManifest.xml الخاص بك:

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

سيؤدي هذا إلى تعطيل ميزة Pointer Tagging لتطبيقك. يرجى ملاحظة أن هذا لا يعالج مشكلة صحية كود الأساسية. ستختفي فتحة الهروب هذه في الإصدارات المستقبلية من Android ، لأن المشكلات من هذا النوع ستكون غير متوافقة مع MTE .