আর্ম মেমরি ট্যাগিং এক্সটেনশন

Arm v9-এ Arm Memory Tagging Extension (MTE) চালু করা হয়েছে, যা ট্যাগড মেমরির একটি হার্ডওয়্যার বাস্তবায়ন

উচ্চ স্তরে, MTE প্রতিটি মেমরি অ্যালোকেশন/ডিঅ্যালোকেশনকে অতিরিক্ত মেটাডেটা দিয়ে ট্যাগ করে। MTE একটি মেমরি লোকেশনকে একটি ট্যাগ প্রদান করে, যা পরবর্তীতে সেই মেমরি লোকেশনকে নির্দেশকারী পয়েন্টারগুলোর সাথে যুক্ত করা যায়। রান টাইমে, সিপিইউ প্রতিটি লোড এবং স্টোরের সময় পয়েন্টার এবং মেটাডেটা ট্যাগগুলো মিলে যাচ্ছে কিনা তা পরীক্ষা করে।

অ্যান্ড্রয়েড ১২-এ কার্নেল এবং ইউজারস্পেস হিপ মেমরি অ্যালোকেটর প্রতিটি অ্যালোকেশনের সাথে মেটাডেটা যুক্ত করতে পারে। এটি ইউজ-আফটার-ফ্রি এবং বাফার-ওভারফ্লো বাগ শনাক্ত করতে সাহায্য করে, যা আমাদের কোডবেসগুলোতে মেমরি সেফটি বাগের সবচেয়ে সাধারণ উৎস।

MTE অপারেটিং মোড

MTE-এর তিনটি অপারেটিং মোড রয়েছে:

  • সিঙ্ক্রোনাস মোড (SYNC)
  • অ্যাসিঙ্ক্রোনাস মোড (ASYNC)
  • অসমমিত মোড (ASYMM)

সিঙ্ক্রোনাস মোড (SYNC)

এই মোডটি পারফরম্যান্সের চেয়ে বাগ সনাক্তকরণের নির্ভুলতার জন্য অপ্টিমাইজ করা হয়েছে এবং যখন উচ্চতর পারফরম্যান্স ওভারহেড গ্রহণযোগ্য হয়, তখন এটিকে একটি নির্ভুল বাগ সনাক্তকরণ টুল হিসাবে ব্যবহার করা যেতে পারে। সক্রিয় করা হলে, MTE SYNC একটি নিরাপত্তা প্রশমন ব্যবস্থা হিসাবে কাজ করে। ট্যাগ অমিলের ক্ষেত্রে, প্রসেসর অবিলম্বে এক্সিকিউশন বন্ধ করে দেয় এবং SIGSEGV (কোড SEGV_MTESERR ) সহ প্রসেসটি টার্মিনেট করে, সাথে মেমরি অ্যাক্সেস এবং ফল্টিং অ্যাড্রেস সম্পর্কে সম্পূর্ণ তথ্য প্রদান করে।

আমরা টেস্টিংয়ের সময় HWASan/KASAN-এর বিকল্প হিসেবে অথবা প্রোডাকশনে, যখন টার্গেট প্রসেসটি একটি ঝুঁকিপূর্ণ অ্যাটাক সারফেস হিসেবে কাজ করে, তখন এই মোডটি ব্যবহার করার পরামর্শ দিই। এছাড়াও, যখন ASYNC মোড কোনো বাগের উপস্থিতি নির্দেশ করে, তখন রানটাইম API ব্যবহার করে এক্সিকিউশনকে SYNC মোডে পরিবর্তন করার মাধ্যমে একটি সঠিক বাগ রিপোর্ট পাওয়া যেতে পারে।

SYNC মোডে চলার সময়, অ্যান্ড্রয়েড অ্যালোকেটর সমস্ত অ্যালোকেশন এবং ডিঅ্যালোকেশনের জন্য স্ট্যাক ট্রেস রেকর্ড করে এবং সেগুলোকে ব্যবহার করে উন্নততর এরর রিপোর্ট প্রদান করে। এই রিপোর্টগুলোতে ইউজ-আফটার-ফ্রি বা বাফার-ওভারফ্লো-এর মতো মেমরি এররের ব্যাখ্যা এবং প্রাসঙ্গিক মেমরি ইভেন্টগুলোর স্ট্যাক ট্রেস অন্তর্ভুক্ত থাকে। এই ধরনের রিপোর্টগুলো আরও বেশি প্রাসঙ্গিক তথ্য প্রদান করে এবং বাগ শনাক্ত ও সমাধান করা সহজ করে তোলে।

অ্যাসিঙ্ক্রোনাস মোড (ASYNC)

এই মোডটি বাগ রিপোর্টের নির্ভুলতার চেয়ে পারফরম্যান্সকে বেশি গুরুত্ব দেয় এবং মেমরি সেফটি বাগ শনাক্ত করার জন্য এটি স্বল্প খরচে ব্যবহার করা যায়। ট্যাগ অমিল হলে, প্রসেসর নিকটতম কার্নেল এন্ট্রি (যেমন, একটি সিস্টেম কল বা টাইমার ইন্টারাপ্ট) পর্যন্ত তার কার্যক্রম চালিয়ে যায়, এবং সেখানে এটি ত্রুটিপূর্ণ অ্যাড্রেস বা মেমরি অ্যাক্সেস রেকর্ড না করেই SIGSEGV (কোড SEGV_MTEAERR ) দিয়ে প্রসেসটি বন্ধ করে দেয়।

আমরা প্রোডাকশনে এই মোডটি এমন সুপরীক্ষিত কোডবেসগুলিতে ব্যবহার করার পরামর্শ দিই, যেখানে মেমরি সেফটি বাগের সংখ্যা কম বলে জানা যায়; যা টেস্টিংয়ের সময় SYNC মোড ব্যবহারের মাধ্যমে অর্জন করা হয়।

অসমমিত মোড (ASYMM)

Arm v8.7-A-এর একটি অতিরিক্ত বৈশিষ্ট্য হলো অ্যাসিমেট্রিক MTE মোড, যা মেমরি রিডের ক্ষেত্রে সিনক্রোনাস চেকিং এবং মেমরি রাইটের ক্ষেত্রে অ্যাসিনক্রোনাস চেকিং প্রদান করে এবং এর পারফরম্যান্স ASYNC মোডের অনুরূপ। বেশিরভাগ ক্ষেত্রে, এই মোডটি ASYNC মোডের চেয়ে উন্নত, এবং যখনই এটি উপলব্ধ থাকে, আমরা ASYNC-এর পরিবর্তে এটি ব্যবহার করার পরামর্শ দিই।

এই কারণে, নিচে বর্ণিত কোনো API-তেই অ্যাসিমেট্রিক মোডের উল্লেখ নেই। এর পরিবর্তে, অ্যাসিঙ্ক্রোনাস অনুরোধ করা হলে সর্বদা অ্যাসিমেট্রিক মোড ব্যবহার করার জন্য OS কনফিগার করা যেতে পারে। আরও তথ্যের জন্য, “Configure the CPU-specific preferred MTE level” দেখুন।

ব্যবহারকারী স্পেসে MTE

নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে কীভাবে সিস্টেম প্রসেস এবং অ্যাপের জন্য MTE সক্রিয় করা যেতে পারে। ডিফল্টরূপে MTE নিষ্ক্রিয় থাকে, যদি না কোনো নির্দিষ্ট প্রসেসের জন্য নীচের বিকল্পগুলির মধ্যে একটি সেট করা হয় ( নীচে দেখুন কোন কোন কম্পোনেন্টের জন্য MTE সক্রিয় করা হয়েছে)।

বিল্ড সিস্টেম ব্যবহার করে MTE সক্রিয় করুন

একটি প্রসেস-ব্যাপী বৈশিষ্ট্য হিসেবে, MTE প্রধান এক্সিকিউটেবলের বিল্ড টাইম সেটিং দ্বারা নিয়ন্ত্রিত হয়। নিম্নলিখিত অপশনগুলো স্বতন্ত্র এক্সিকিউটেবলের জন্য, অথবা সোর্স ট্রির সম্পূর্ণ সাবডিরেক্টরির জন্য এই সেটিং পরিবর্তন করার সুযোগ দেয়। লাইব্রেরি, অথবা এমন কোনো টার্গেট যা এক্সিকিউটেবল বা টেস্ট নয়, সেগুলোর ক্ষেত্রে এই সেটিংটি উপেক্ষা করা হয়।

১. একটি নির্দিষ্ট প্রজেক্টের জন্য Android.bp তে MTE সক্রিয় করা ( উদাহরণ ):

এমটিই মোড সেটিং
অ্যাসিঙ্ক্রোনাস এমটিই
  sanitize: {
  memtag_heap: true,
  }
সিঙ্ক্রোনাস এমটিই
  sanitize: {
  memtag_heap: true,
  diag: {
  memtag_heap: true,
  },
  }

অথবা Android.mk:

এমটিই মোড সেটিং
Asynchronous MTE LOCAL_SANITIZE := memtag_heap
Synchronous MTE LOCAL_SANITIZE := memtag_heap
LOCAL_SANITIZE_DIAG := memtag_heap

২. একটি প্রোডাক্ট ভেরিয়েবল ব্যবহার করে সোর্স ট্রির কোনো সাবডিরেক্টরিতে MTE সক্রিয় করা:

MTE মোড তালিকা অন্তর্ভুক্ত করুন বাদ দেওয়ার তালিকা
অ্যাসিঙ্ক PRODUCT_MEMTAG_HEAP_ASYNC_INCLUDE_PATHS MEMTAG_HEAP_ASYNC_INCLUDE_PATHS PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS
সিঙ্ক PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS MEMTAG_HEAP_SYNC_INCLUDE_PATHS

অথবা

এমটিই মোড সেটিং
অ্যাসিঙ্ক্রোনাস এমটিই MEMTAG_HEAP_ASYNC_INCLUDE_PATHS
সিঙ্ক্রোনাস এমটিই MEMTAG_HEAP_SYNC_INCLUDE_PATHS

অথবা কোনো এক্সিকিউটেবলের এক্সক্লুড পাথ নির্দিষ্ট করে:

এমটিই মোড সেটিং
অ্যাসিঙ্ক্রোনাস এমটিই PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS
সিঙ্ক্রোনাস এমটিই

উদাহরণস্বরূপ, ( PRODUCT_CFI_INCLUDE_PATHS এর অনুরূপ ব্যবহার)

  PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS=vendor/$(vendor)
  PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS=vendor/$(vendor)/projectA \
                                    vendor/$(vendor)/projectB

সিস্টেম প্রোপার্টি ব্যবহার করে MTE সক্রিয় করুন

উপরের বিল্ড সেটিংসগুলো রান টাইমে নিম্নলিখিত সিস্টেম প্রপার্টি সেট করার মাধ্যমে ওভাররাইড করা যেতে পারে:

arm64.memtag.process.<basename> = (off|sync|async)

যেখানে basename বলতে এক্সিকিউটেবলটির মূল নাম বোঝায়।

উদাহরণস্বরূপ, /system/bin/ping অথবা /data/local/tmp/ping অ্যাসিঙ্ক্রোনাস MTE ব্যবহার করার জন্য সেট করতে, adb shell setprop arm64.memtag.process.ping async ব্যবহার করুন।

একটি এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে MTE সক্রিয় করুন।

নেটিভ প্রসেসের (নন-অ্যাপ) জন্য বিল্ড সেটিং ওভাররাইড করার আরেকটি উপায় হলো MEMTAG_OPTIONS=(off|sync|async) এনভায়রনমেন্ট ভেরিয়েবলটি নির্ধারণ করা। যদি এনভায়রনমেন্ট ভেরিয়েবল এবং সিস্টেম প্রপার্টি উভয়ই নির্ধারণ করা থাকে, তবে ভেরিয়েবলটি অগ্রাধিকার পাবে।

অ্যাপগুলির জন্য MTE সক্রিয় করুন

নির্দিষ্ট করে না দেওয়া হলে MTE ডিফল্টরূপে নিষ্ক্রিয় থাকে, কিন্তু যে অ্যাপগুলি MTE ব্যবহার করতে চায়, তারা AndroidManifest.xml এর <application> বা <process> ট্যাগের অধীনে android:memtagMode সেট করে তা করতে পারে।

android:memtagMode=(off|default|sync|async)

<application> ট্যাগে সেট করা হলে, অ্যাট্রিবিউটটি অ্যাপ দ্বারা ব্যবহৃত সমস্ত প্রসেসকে প্রভাবিত করে, এবং <process> ট্যাগ সেট করার মাধ্যমে স্বতন্ত্র প্রসেসের জন্য এটিকে ওভাররাইড করা যেতে পারে।

পরীক্ষামূলকভাবে, যে অ্যাপ তার ম্যানিফেস্টে কোনো মান নির্দিষ্ট করে না (অথবা default নির্দিষ্ট করে), তার memtagMode অ্যাট্রিবিউটের ডিফল্ট মান সেট করার জন্য কম্প্যাটিবিলিটি পরিবর্তন ব্যবহার করা যেতে পারে।

এগুলো গ্লোবাল সেটিং মেনুর System > Advanced > Developer options > App Compatibility Changes-এর অধীনে রয়েছে। NATIVE_MEMTAG_ASYNC বা NATIVE_MEMTAG_SYNC সেট করলে একটি নির্দিষ্ট অ্যাপের জন্য MTE সক্রিয় হয়। বিকল্পভাবে, এটি am কমান্ড ব্যবহার করে নিম্নরূপে সেট করা যেতে পারে:

$ adb shell am compat enable NATIVE_MEMTAG_[A]SYNC my.app.name

একটি MTE সিস্টেম ইমেজ তৈরি করুন

আমরা ডেভেলপমেন্ট এবং ব্রিং-আপের সময় সমস্ত নেটিভ বাইনারিতে MTE সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করি। এটি মেমরি সেফটি বাগগুলি দ্রুত শনাক্ত করতে সাহায্য করে এবং টেস্টিং বিল্ডে সক্রিয় করা হলে ব্যবহারকারীকে বাস্তবসম্মত সুরক্ষা প্রদান করে।

ডেভেলপমেন্ট চলাকালীন সকল নেটিভ বাইনারিতে MTE সিনক্রোনাস মোডে সক্রিয় করার জন্য আমরা দৃঢ়ভাবে সুপারিশ করছি।

SANITIZE_TARGET=memtag_heap SANITIZE_TARGET_DIAG=memtag_heap m

বিল্ড সিস্টেমের যেকোনো ভেরিয়েবলের মতোই, SANITIZE_TARGET এনভায়রনমেন্ট ভেরিয়েবল বা make সেটিং হিসেবে ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ, একটি product.mk ফাইলে)।

এটি সমস্ত নেটিভ প্রসেসের জন্য MTE সক্ষম করে, কিন্তু অ্যাপগুলির জন্য নয় (যেগুলি zygote64 থেকে ফোর্ক করা হয়েছে), যেগুলির জন্য " অ্যাপগুলির জন্য MTE সক্ষম করুন" -এ দেওয়া নির্দেশাবলী অনুসরণ করে MTE সক্ষম করা যেতে পারে।

সিপিইউ-নির্দিষ্ট পছন্দের এমটিই স্তর কনফিগার করুন

কিছু সিপিইউতে ASYMM বা এমনকি SYNC মোডে MTE-এর পারফরম্যান্স ASYNC-এর মতোই হতে পারে। এই কারণে, যখন একটি কম কঠোর চেকিং মোডের অনুরোধ করা হয়, তখন সেই সিপিইউগুলিতে আরও কঠোর চেক সক্রিয় করা লাভজনক, যাতে পারফরম্যান্সের অসুবিধা ছাড়াই কঠোর চেকের ত্রুটি সনাক্তকরণের সুবিধাগুলি পাওয়া যায়।

ডিফল্টরূপে, ASYNC মোডে চলার জন্য কনফিগার করা প্রসেসগুলো সমস্ত সিপিইউ-তে ASYNC মোডে চলে। নির্দিষ্ট সিপিইউ-তে এই প্রসেসগুলোকে SYNC মোডে চালানোর জন্য কার্নেলকে কনফিগার করতে হলে, বুট করার সময় /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred sysfs এন্ট্রিতে sync ভ্যালুটি লিখতে হবে। এটি একটি init স্ক্রিপ্টের মাধ্যমে করা যেতে পারে। উদাহরণস্বরূপ, সিপিইউ ০-১-কে ASYNC মোড প্রসেসগুলো SYNC মোডে এবং সিপিইউ ২-৩-কে ASYMM মোডে চালানোর জন্য কনফিগার করতে, একটি ভেন্ডর init স্ক্রিপ্টের init ক্লজে নিম্নলিখিতটি যোগ করা যেতে পারে:

  write /sys/devices/system/cpu/cpu0/mte_tcf_preferred sync
  write /sys/devices/system/cpu/cpu1/mte_tcf_preferred sync
  write /sys/devices/system/cpu/cpu2/mte_tcf_preferred asymm
  write /sys/devices/system/cpu/cpu3/mte_tcf_preferred asymm

SYNC মোডে চলমান ASYNC মোড প্রসেসের টুম্বস্টোনে মেমরি ত্রুটির অবস্থানের একটি সুনির্দিষ্ট স্ট্যাক ট্রেস থাকে। তবে, এগুলিতে অ্যালোকেশন বা ডিঅ্যালোকেশনের স্ট্যাক ট্রেস অন্তর্ভুক্ত থাকে না। এই স্ট্যাক ট্রেসগুলি কেবল তখনই পাওয়া যায়, যদি প্রসেসটি SYNC মোডে চলার জন্য কনফিগার করা থাকে।

int mallopt(M_THREAD_DISABLE_MEM_INIT, level)

যেখানে level হলো ০ অথবা ১।

malloc-এর সময় মেমরি ইনিশিয়ালাইজেশন নিষ্ক্রিয় করে, এবং সঠিকতার জন্য প্রয়োজন না হলে মেমরি ট্যাগ পরিবর্তন করা থেকে বিরত থাকে।

int mallopt(M_MEMTAG_TUNING, level)

যেখানে level হল:

  • M_MEMTAG_TUNING_BUFFER_OVERFLOW
  • M_MEMTAG_TUNING_UAF

ট্যাগ বরাদ্দ কৌশল নির্বাচন করে।

  • ডিফল্ট সেটিং হলো M_MEMTAG_TUNING_BUFFER_OVERFLOW
  • M_MEMTAG_TUNING_BUFFER_OVERFLOW সংলগ্ন অ্যালোকেশনগুলিতে স্বতন্ত্র ট্যাগ মান নির্ধারণ করে লিনিয়ার বাফার ওভারফ্লো এবং আন্ডারফ্লো বাগগুলির সুনির্দিষ্ট সনাক্তকরণ সক্ষম করে। এই মোডে ইউজ-আফটার-ফ্রি বাগ সনাক্ত করার সম্ভাবনা কিছুটা কম, কারণ প্রতিটি মেমরি লোকেশনের জন্য সম্ভাব্য ট্যাগ মানগুলির মাত্র অর্ধেক উপলব্ধ থাকে। MTE একই ট্যাগ গ্র্যানিউলের (১৬-বাইট অ্যালাইনড চাঙ্ক) মধ্যে ওভারফ্লো সনাক্ত করতে পারে না এবং এই মোডেও ছোট ওভারফ্লো ধরতে ব্যর্থ হতে পারে। এই ধরনের ওভারফ্লো মেমরি করাপশনের কারণ হতে পারে না, কারণ একটি গ্র্যানিউলের ভেতরের মেমরি কখনও একাধিক অ্যালোকেশনের জন্য ব্যবহৃত হয় না।
  • M_MEMTAG_TUNING_UAF স্বাধীনভাবে র‍্যান্ডমাইজড ট্যাগগুলোকে সক্ষম করে, যা স্থানিক (বাফার ওভারফ্লো) এবং কালিক (ইউজ আফটার ফ্রি) উভয় প্রকার বাগ শনাক্ত করার ক্ষেত্রে প্রায় ৯৩% অভিন্ন সম্ভাবনা নিশ্চিত করে।

উপরে বর্ণিত এপিআইগুলো ছাড়াও, অভিজ্ঞ ব্যবহারকারীরা নিম্নলিখিত বিষয়গুলো সম্পর্কে অবগত থাকতে পারেন:

  • PSTATE.TCO হার্ডওয়্যার রেজিস্টার সেট করার মাধ্যমে সাময়িকভাবে ট্যাগ চেকিং দমন করা যায় ( উদাহরণ )। যেমন, অজানা ট্যাগ কন্টেন্টসহ কোনো মেমোরি রেঞ্জ কপি করার সময়, অথবা কোনো হট লুপে পারফরম্যান্সের প্রতিবন্ধকতা দূর করার জন্য এটি করা হয়।
  • M_HEAP_TAGGING_LEVEL_SYNC ব্যবহার করার সময়, সিস্টেম ক্র্যাশ হ্যান্ডলার অ্যালোকেশন এবং ডিঅ্যালোকেশন স্ট্যাক ট্রেসের মতো অতিরিক্ত তথ্য প্রদান করে। এই কার্যকারিতার জন্য ট্যাগ বিটগুলিতে অ্যাক্সেসের প্রয়োজন হয় এবং সিগন্যাল হ্যান্ডলার সেট করার সময় SA_EXPOSE_TAGBITS ফ্ল্যাগটি পাস করার মাধ্যমে এটি সক্রিয় করা হয়। যে কোনো প্রোগ্রাম যা তার নিজস্ব সিগন্যাল হ্যান্ডলার সেট করে এবং অজানা ক্র্যাশের ক্ষেত্রে সিস্টেম হ্যান্ডলারের উপর দায়িত্ব অর্পণ করে, তাদেরও একই কাজ করার পরামর্শ দেওয়া হয়।

কার্নেলে MTE

কার্নেলের জন্য MTE-অ্যাক্সিলারেটেড KASAN সক্রিয় করতে, কার্নেলটিকে CONFIG_KASAN=y এবং CONFIG_KASAN_HW_TAGS=y দিয়ে কনফিগার করুন। Android 12-5.10 থেকে শুরু করে GKI কার্নেলগুলিতে এই কনফিগারেশনগুলি ডিফল্টরূপে সক্রিয় থাকে।

আপনি নিম্নলিখিত কমান্ড লাইন আর্গুমেন্টগুলো ব্যবহার করে বুট করার সময় এটি নিয়ন্ত্রণ করতে পারেন:

  • kasan=[on|off] - কাসান (KASAN) চালু বা বন্ধ করুন (ডিফল্ট: on )
  • kasan.mode=[sync |async ] - সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস মোডের মধ্যে নির্বাচন করুন (ডিফল্ট: sync )
  • kasan.stacktrace=[on|off] - স্ট্যাক ট্রেস সংগ্রহ করা হবে কিনা (ডিফল্ট: on )
    • স্ট্যাক ট্রেস সংগ্রহের জন্য stack_depot_disable=off ও প্রয়োজন।
  • kasan.fault=[report|panic] - শুধুমাত্র রিপোর্টটি প্রিন্ট করা হবে, নাকি কার্নেলকেও প্যানিক করানো হবে (ডিফল্ট: report )। এই অপশনটি নির্বিশেষে, প্রথম রিপোর্ট করা ত্রুটির পর ট্যাগ চেকিং নিষ্ক্রিয় হয়ে যায়।

ব্রিং-আপ, ডেভেলপমেন্ট এবং টেস্টিং-এর সময় আমরা SYNC মোড ব্যবহার করার জন্য জোরালোভাবে সুপারিশ করি। এই অপশনটি এনভায়রনমেন্ট ভেরিয়েবল অথবা বিল্ড সিস্টেম ব্যবহার করে সমস্ত প্রসেসের জন্য বিশ্বব্যাপী সক্রিয় করা উচিত। এই মোডে, ডেভেলপমেন্ট প্রক্রিয়ার শুরুতেই বাগ শনাক্ত করা যায়, কোডবেস দ্রুত স্থিতিশীল হয় এবং পরবর্তীতে প্রোডাকশনে বাগ শনাক্ত করার খরচ এড়ানো যায়।

আমরা প্রোডাকশনে ASYNC মোড ব্যবহার করার জন্য জোরালোভাবে সুপারিশ করি। এটি একটি প্রসেসে মেমরি সেফটি বাগের উপস্থিতি শনাক্ত করার জন্য একটি স্বল্প খরচের টুল এবং সেইসাথে আরও গভীর প্রতিরক্ষা ব্যবস্থা প্রদান করে। একবার কোনো বাগ শনাক্ত হলে, ডেভেলপার রানটাইম API ব্যবহার করে SYNC মোডে স্যুইচ করতে পারেন এবং নির্বাচিত কিছু ব্যবহারকারীর কাছ থেকে একটি সঠিক স্ট্যাক ট্রেস পেতে পারেন।

আমরা SoC-এর জন্য সিপিইউ-নির্দিষ্ট পছন্দের MTE লেভেল কনফিগার করার জন্য দৃঢ়ভাবে সুপারিশ করছি। Asymm মোডের পারফরম্যান্স বৈশিষ্ট্য সাধারণত ASYNC-এর মতোই হয়, এবং এটি প্রায় সবসময়ই ASYNC-এর চেয়ে শ্রেয়। স্মল ইন-অর্ডার কোরগুলো প্রায়শই তিনটি মোডেই একই রকম পারফরম্যান্স দেখায়, এবং সেগুলোকে SYNC-কে প্রাধান্য দেওয়ার জন্য কনফিগার করা যেতে পারে।

ডেভেলপারদের /data/tombstones , logcat চেক করে অথবা এন্ড ইউজার বাগের জন্য ভেন্ডরের DropboxManager পাইপলাইন মনিটর করে ক্র্যাশের উপস্থিতি যাচাই করা উচিত। অ্যান্ড্রয়েড নেটিভ কোড ডিবাগিং সম্পর্কে আরও তথ্যের জন্য, এখানের তথ্য দেখুন।

MTE সক্ষম প্ল্যাটফর্ম উপাদান

অ্যান্ড্রয়েড ১২-এ, বেশ কিছু নিরাপত্তা-সংক্রান্ত গুরুত্বপূর্ণ সিস্টেম কম্পোনেন্ট এন্ড-ইউজার ক্র্যাশ শনাক্ত করতে এবং একটি অতিরিক্ত গভীর প্রতিরক্ষা স্তর হিসেবে কাজ করার জন্য MTE ASYNC ব্যবহার করে। এই কম্পোনেন্টগুলো হলো:

  • নেটওয়ার্কিং ডেমন এবং ইউটিলিটিসমূহ ( netd ব্যতীত)
  • ব্লুটুথ, সিকিউরএলিমেন্ট, এনএফসি এইচএএল এবং সিস্টেম অ্যাপস
  • statsd ডেমন
  • system_server
  • zygote64 (অ্যাপগুলিকে MTE ব্যবহারে সম্মতি জানানোর সুযোগ দিতে)

এই লক্ষ্যগুলো নিম্নলিখিত মানদণ্ডের ভিত্তিতে নির্বাচন করা হয়েছিল:

  • একটি বিশেষাধিকারপ্রাপ্ত প্রসেস (এমন একটি প্রসেস যা এমন কিছুতে অ্যাক্সেস পায় যা unprivileged_app SELinux ডোমেইনের নেই)
  • অবিশ্বস্ত ইনপুট প্রক্রিয়া করে ( দুইয়ের নিয়ম )
  • গ্রহণযোগ্য পারফরম্যান্স হ্রাস (এই ধীরগতির কারণে ব্যবহারকারীর কাছে দৃশ্যমান কোনো ল্যাটেন্সি তৈরি হয় না)

আমরা বিক্রেতাদেরকে উপরে উল্লিখিত মানদণ্ডগুলো অনুসরণ করে আরও বেশি কম্পোনেন্টের জন্য প্রোডাকশনে MTE চালু করতে উৎসাহিত করি। ডেভেলপমেন্টের সময় আমরা এই কম্পোনেন্টগুলোকে SYNC মোডে পরীক্ষা করার পরামর্শ দিই, যাতে সহজে সমাধানযোগ্য বাগগুলো শনাক্ত করা যায় এবং সেগুলোর পারফরম্যান্সের উপর ASYNC-এর প্রভাব মূল্যায়ন করা যায়।

আসন্ন হার্ডওয়্যার ডিজাইনগুলোর পারফরম্যান্স বৈশিষ্ট্যের ওপর ভিত্তি করে, আমরা সেইসব সিস্টেম কম্পোনেন্টের তালিকা প্রসারিত করার পরিকল্পনা করছি যেগুলোতে MTE সক্রিয় করা আছে।