المؤشرات ذات العلامات

بدءًا من الإصدار 11 من نظام Android، وبالنسبة إلى عمليات 64 بت، سيتم توفير علامة محددة للتنفيذ محددة في البايت العلوي من المؤشر على الأجهزة التي تحتوي على دعم kernel لتجاهل ARM أعلى البايت (TBI). أي تطبيق يعدّل هذا يتم إنهاؤها عند التحقّق من العلامة أثناء الصفقة. هذا الإجراء ضروري للأجهزة المستقبلية التي ستدعم إضافة وضع علامات الذاكرة (ARM) (MTE).

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

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

يتطلب مكتب التحقيقات الفيدرالي (TBI) جدولاً متوافقًا kernel التي تعالج بشكل صحيح المؤشرات ذات العلامات التي يتم تمريرها من مساحة المستخدم. تتميّز النواة الشائعة لنظام التشغيل Android بدءًا من الإصدار 4.14 (Pixel 4) والإصدارات الأحدث بـ TBI المطلوب. التصحيحات.

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

جاهزية إضافة وضع علامات الذاكرة

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

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

دعم مطوّر البرامج

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

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

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

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

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

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

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

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