আর্ম v9 আর্ম মেমরি ট্যাগিং এক্সটেনশন (MTE), ট্যাগ করা মেমরির একটি হার্ডওয়্যার বাস্তবায়ন প্রবর্তন করে।
উচ্চ স্তরে, MTE প্রতিটি মেমরি বরাদ্দ/অবণ্টনকে অতিরিক্ত মেটাডেটা দিয়ে ট্যাগ করে। এটি একটি মেমরি অবস্থানে একটি ট্যাগ বরাদ্দ করে, যা তারপর সেই মেমরি অবস্থানের উল্লেখকারী পয়েন্টারগুলির সাথে যুক্ত হতে পারে। রানটাইমে CPU চেক করে যে পয়েন্টার এবং মেটাডেটা ট্যাগ প্রতিটি লোড এবং স্টোরে মেলে।
অ্যান্ড্রয়েড 12-এ কার্নেল এবং ইউজারস্পেস হিপ মেমরি অ্যালোকেটর মেটাডেটা সহ প্রতিটি বরাদ্দ বৃদ্ধি করতে পারে। এটি ব্যবহার-পর-মুক্ত এবং বাফার-ওভারফ্লো বাগগুলি সনাক্ত করতে সহায়তা করে, যা আমাদের কোডবেসে মেমরি সুরক্ষা বাগগুলির সবচেয়ে সাধারণ উত্স।
MTE অপারেটিং মোড
MTE এর তিনটি অপারেটিং মোড রয়েছে:
- সিঙ্ক্রোনাস মোড (SYNC)
- অ্যাসিঙ্ক্রোনাস মোড (ASYNC)
- অ্যাসিমেট্রিক মোড (ASYMM)
সিঙ্ক্রোনাস মোড (SYNC)
এই মোডটি পারফরম্যান্সের উপর বাগ সনাক্তকরণের সঠিকতার জন্য অপ্টিমাইজ করা হয়েছে এবং উচ্চতর কার্যক্ষমতা ওভারহেড গ্রহণযোগ্য হলে একটি সুনির্দিষ্ট বাগ সনাক্তকরণ সরঞ্জাম হিসাবে ব্যবহার করা যেতে পারে। সক্রিয় করা হলে, MTE SYNC একটি নিরাপত্তা প্রশমন হিসাবে কাজ করে। ট্যাগের অমিল হলে, প্রসেসর অবিলম্বে এক্সিকিউশন বাতিল করে এবং SIGSEGV
(কোড SEGV_MTESERR
) এবং মেমরি অ্যাক্সেস এবং ত্রুটিযুক্ত ঠিকানা সম্পর্কে সম্পূর্ণ তথ্য দিয়ে প্রক্রিয়াটি বন্ধ করে দেয়।
আমরা পরীক্ষার সময় HWASan/KASAN-এর বিকল্প হিসাবে বা উৎপাদনে এই মোডটি ব্যবহার করার পরামর্শ দিই যখন লক্ষ্য প্রক্রিয়াটি একটি দুর্বল আক্রমণের পৃষ্ঠকে উপস্থাপন করে। উপরন্তু, যখন ASYNC মোড একটি বাগ উপস্থিতি নির্দেশ করে, তখন SYNC মোডে এক্সিকিউশন স্যুইচ করতে রানটাইম API ব্যবহার করে একটি সঠিক বাগ রিপোর্ট পাওয়া যেতে পারে।
SYNC মোডে চলাকালীন, অ্যান্ড্রয়েড অ্যালোকেটর সমস্ত বরাদ্দ এবং ডিলোকেশনের জন্য স্ট্যাক ট্রেস রেকর্ড করে এবং সেগুলিকে আরও ভাল ত্রুটি রিপোর্ট প্রদান করতে ব্যবহার করে যাতে মেমরি ত্রুটির ব্যাখ্যা অন্তর্ভুক্ত থাকে, যেমন ব্যবহার-পর-মুক্ত, বা বাফার-ওভারফ্লো এবং স্ট্যাক। প্রাসঙ্গিক স্মৃতি ঘটনা ট্রেস. এই ধরনের প্রতিবেদনগুলি আরও প্রাসঙ্গিক তথ্য প্রদান করে এবং বাগগুলিকে ট্রেস এবং ঠিক করা সহজ করে তোলে৷
অ্যাসিঙ্ক্রোনাস মোড (ASYNC)
এই মোডটি বাগ রিপোর্টের নির্ভুলতার উপর পারফরম্যান্সের জন্য অপ্টিমাইজ করা হয়েছে এবং মেমরি নিরাপত্তা বাগগুলির জন্য কম ওভারহেড সনাক্তকরণ হিসাবে ব্যবহার করা যেতে পারে।
ট্যাগের অমিল হলে, প্রসেসর নিকটতম কার্নেল এন্ট্রি (উদাহরণস্বরূপ, একটি syscall বা টাইমার বাধা) না হওয়া পর্যন্ত কার্য সম্পাদন চালিয়ে যায়, যেখানে এটি ত্রুটিযুক্ত ঠিকানা বা মেমরি অ্যাক্সেস রেকর্ড না করে SIGSEGV
(কোড SEGV_MTEAERR
) দিয়ে প্রক্রিয়াটি বন্ধ করে দেয়।
আমরা ভালভাবে পরীক্ষিত কোডবেসগুলিতে উত্পাদনে এই মোডটি ব্যবহার করার পরামর্শ দিই যেখানে মেমরি সুরক্ষা বাগগুলির ঘনত্ব কম বলে পরিচিত, যা পরীক্ষার সময় SYNC মোড ব্যবহার করে অর্জন করা হয়।
অ্যাসিমেট্রিক মোড (ASYMM)
আর্ম v8.7-A-এ একটি অতিরিক্ত বৈশিষ্ট্য, অ্যাসিমেট্রিক এমটিই মোড মেমরি রিডের উপর সিঙ্ক্রোনাস চেকিং এবং মেমরি রাইটের অ্যাসিঙ্ক্রোনাস চেকিং প্রদান করে, ASYNC মোডের মতো পারফরম্যান্স সহ। বেশিরভাগ পরিস্থিতিতে, এই মোডটি ASYNC মোডের তুলনায় একটি উন্নতি, এবং আমরা যখনই এটি উপলব্ধ থাকে তখন ASYNC এর পরিবর্তে এটি ব্যবহার করার পরামর্শ দিই৷
এই কারণে, নিচে বর্ণিত API-এর কোনোটিই অসিম্যাট্রিক মোড উল্লেখ করে না। পরিবর্তে, যখন অ্যাসিঙ্ক্রোনাস অনুরোধ করা হয় তখন সর্বদা অসমমিতিক মোড ব্যবহার করার জন্য OS কনফিগার করা যেতে পারে। আরও তথ্যের জন্য অনুগ্রহ করে "CPU-নির্দিষ্ট পছন্দের MTE স্তর কনফিগার করা" বিভাগটি দেখুন।
ইউজারস্পেসে MTE
নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে সিস্টেম প্রক্রিয়া এবং অ্যাপগুলির জন্য MTE সক্ষম করা যেতে পারে৷ MTE ডিফল্টরূপে নিষ্ক্রিয় করা হয়, যদি না নিচের বিকল্পগুলির মধ্যে একটি নির্দিষ্ট প্রক্রিয়ার জন্য সেট করা থাকে ( নীচে MTE কোন উপাদানগুলির জন্য সক্রিয় করা আছে দেখুন)।
বিল্ড সিস্টেম ব্যবহার করে MTE সক্ষম করুন
প্রসেস-ওয়াইড প্রপার্টি হিসেবে, MTE প্রধান এক্সিকিউটেবলের বিল্ড টাইম সেটিং দ্বারা নিয়ন্ত্রিত হয়। নিম্নলিখিত বিকল্পগুলি পৃথক এক্সিকিউটেবলের জন্য বা উৎস গাছের সম্পূর্ণ সাবডিরেক্টরির জন্য এই সেটিং পরিবর্তন করার অনুমতি দেয়। সেটিং লাইব্রেরিতে উপেক্ষা করা হয়, অথবা কোনো টার্গেট যা এক্সিকিউটেবল বা পরীক্ষা নয়।
1. Android.bp
এ MTE সক্ষম করা ( উদাহরণ ), একটি নির্দিষ্ট প্রকল্পের জন্য:
MTE মোড | সেটিং |
---|---|
অ্যাসিঙ্ক্রোনাস MTE | sanitize: { memtag_heap: true, } |
সিঙ্ক্রোনাস MTE | sanitize: { memtag_heap: true, diag: { memtag_heap: true, }, } |
অথবা Android.mk:
MTE মোড | সেটিং |
---|---|
Asynchronous MTE | LOCAL_SANITIZE := memtag_heap |
Synchronous MTE | LOCAL_SANITIZE := memtag_heap LOCAL_SANITIZE_DIAG := memtag_heap |
2. একটি প্রোডাক্ট ভেরিয়েবল ব্যবহার করে সোর্স ট্রিতে একটি সাবডিরেক্টরিতে 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 |
বা
MTE মোড | সেটিং |
---|---|
অ্যাসিঙ্ক্রোনাস MTE | MEMTAG_HEAP_ASYNC_INCLUDE_PATHS |
সিঙ্ক্রোনাস MTE | MEMTAG_HEAP_SYNC_INCLUDE_PATHS |
অথবা একটি এক্সিকিউটেবল এর এক্সক্লুড পাথ উল্লেখ করে:
MTE মোড | সেটিং |
---|---|
অ্যাসিঙ্ক্রোনাস MTE | PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS |
সিঙ্ক্রোনাস MTE |
উদাহরণ, ( 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
হল এক্সিকিউটেবলের বেস নাম।
উদাহরণস্বরূপ, অ্যাসিঙ্ক্রোনাস MTE ব্যবহার করতে /system/bin/ping
বা /data/local/tmp/ping
সেট করতে, 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>
ট্যাগ সেট করে পৃথক প্রক্রিয়ার জন্য ওভাররাইড করা যেতে পারে।
পরীক্ষা-নিরীক্ষার জন্য, সামঞ্জস্য পরিবর্তনগুলি এমন একটি অ্যাপের জন্য memtagMode
বৈশিষ্ট্যের ডিফল্ট মান সেট করতে ব্যবহার করা যেতে পারে যা ম্যানিফেস্টে কোনো মান নির্দিষ্ট করে না (বা default
নির্দিষ্ট করে)।
এগুলি 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 সক্ষম করা যেতে পারে৷
CPU-নির্দিষ্ট পছন্দের MTE স্তর কনফিগার করুন
কিছু CPU-তে ASYMM বা এমনকি SYNC মোডে MTE-এর কর্মক্ষমতা ASYNC-এর মতোই হতে পারে। যখন কম কঠোর চেকিং মোডের অনুরোধ করা হয় তখন এই CPU-তে কঠোর চেক সক্রিয় করা সার্থক করে তোলে, যাতে পারফরম্যান্সের ঘাটতি ছাড়াই কঠোর চেকের ত্রুটি সনাক্তকরণের সুবিধা পাওয়া যায়।
ডিফল্টরূপে, ASYNC মোডে চালানোর জন্য কনফিগার করা প্রক্রিয়াগুলি সমস্ত CPU-তে ASYNC মোডে চলবে৷ নির্দিষ্ট CPU-তে SYNC মোডে এই প্রক্রিয়াগুলি চালানোর জন্য কার্নেল কনফিগার করার জন্য, বুট করার সময় sysfs
এন্ট্রি /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred
এ মান সিঙ্ক লিখতে হবে। এটি একটি init স্ক্রিপ্ট দিয়ে করা যেতে পারে। উদাহরণস্বরূপ, সিপিইউ 0-1 কনফিগার করার জন্য ASYNC মোড প্রক্রিয়াগুলিকে SYNC মোডে চালানোর জন্য এবং ASYMM মোডে চালানোর জন্য CPUs 2-3 ব্যবহার করার জন্য, নিম্নলিখিতগুলি একটি ভেন্ডর 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 মোড প্রসেস থেকে Tombstones মেমরি ত্রুটির অবস্থানের একটি সুনির্দিষ্ট স্ট্যাক ট্রেস ধারণ করবে। যাইহোক, তারা একটি বরাদ্দ বা ডিলোকেশন স্ট্যাক ট্রেস অন্তর্ভুক্ত করবে না। এই স্ট্যাক ট্রেসগুলি শুধুমাত্র তখনই পাওয়া যায় যদি প্রক্রিয়াটি SYNC মোডে চালানোর জন্য কনফিগার করা থাকে।
int mallopt(M_THREAD_DISABLE_MEM_INIT, level)
যেখানে level
0 বা 1।
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 একই ট্যাগ গ্রানুলের মধ্যে ওভারফ্লো সনাক্ত করতে পারে না (16-বাইট সারিবদ্ধ অংশ), এবং এই মোডেও ছোট ওভারফ্লো মিস করতে পারে। এই ধরনের ওভারফ্লো মেমরি দুর্নীতির কারণ হতে পারে না, কারণ এক গ্রানুলের মধ্যে থাকা মেমরি কখনোই একাধিক বরাদ্দের জন্য ব্যবহার করা হয় না। -
M_MEMTAG_TUNING_UAF
- স্থানিক (বাফার ওভারফ্লো) এবং টেম্পোরাল (বিনামূল্যে ব্যবহার করুন) উভয় বাগ সনাক্ত করার জন্য অভিন্ন ~93% সম্ভাবনার জন্য স্বাধীনভাবে এলোমেলো ট্যাগ সক্ষম করে৷
উপরে বর্ণিত APIগুলি ছাড়াও, অভিজ্ঞ ব্যবহারকারীরা নিম্নলিখিতগুলি সম্পর্কে সচেতন হতে চাইতে পারেন:
-
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 মোড ব্যবহার করার পরামর্শ দিই। এটি একটি প্রক্রিয়ায় মেমরি নিরাপত্তা বাগগুলির উপস্থিতি সনাক্ত করার পাশাপাশি আরও প্রতিরক্ষা-ইন-গভীরতার জন্য একটি কম ওভারহেড টুল সরবরাহ করে। একবার একটি বাগ শনাক্ত করা হলে, বিকাশকারী SYNC মোডে স্যুইচ করতে রানটাইম API গুলি ব্যবহার করতে পারে এবং ব্যবহারকারীদের একটি নমুনা সেট থেকে একটি সঠিক স্ট্যাক ট্রেস পেতে পারে৷
আমরা দৃঢ়ভাবে SoC-এর জন্য CPU-নির্দিষ্ট পছন্দের MTE স্তর কনফিগার করার সুপারিশ করছি। Asymm মোডের সাধারণত ASYNC-এর মতো একই পারফরম্যান্স বৈশিষ্ট্য থাকে এবং এটি প্রায় সবসময়ই পছন্দনীয়। ছোট ইন-অর্ডার কোরগুলি প্রায়শই তিনটি মোডে একই রকমের কার্যকারিতা দেখায় এবং SYNC পছন্দ করার জন্য কনফিগার করা যেতে পারে।
ডেভেলপারদের ক্র্যাশের উপস্থিতি পরীক্ষা করা উচিত /data/tombstones
, logcat
চেক করে বা শেষ ব্যবহারকারীর বাগগুলির জন্য বিক্রেতা DropboxManager
পাইপলাইন পর্যবেক্ষণ করে। অ্যান্ড্রয়েড নেটিভ কোড ডিবাগ করার বিষয়ে আরও তথ্যের জন্য, এখানে তথ্য দেখুন।
MTE সক্ষম প্ল্যাটফর্ম উপাদান
অ্যান্ড্রয়েড 12-এ, ব্যবহারকারীর ক্র্যাশ শনাক্ত করতে এবং ডিফেন্স-ইন-ডেপ্থের অতিরিক্ত স্তর হিসেবে কাজ করার জন্য বেশ কয়েকটি নিরাপত্তা সংক্রান্ত গুরুত্বপূর্ণ সিস্টেম উপাদান MTE ASYNC ব্যবহার করে। এই উপাদানগুলি হল:
- নেটওয়ার্কিং ডেমন এবং ইউটিলিটি (
netd
বাদে) - Bluetooth, SecureElement, NFC HALs, এবং সিস্টেম অ্যাপ
-
statsd
ডেমন -
system_server
-
zygote64
(অ্যাপগুলিকে MTE ব্যবহার করার জন্য অপ্ট-ইন করার অনুমতি দিতে)
এই লক্ষ্যগুলি নিম্নলিখিত মানদণ্ডের উপর ভিত্তি করে নির্বাচন করা হয়েছিল:
- একটি বিশেষাধিকারপ্রাপ্ত প্রক্রিয়া (একটি প্রক্রিয়া হিসাবে সংজ্ঞায়িত যা এমন কিছুতে অ্যাক্সেস করে যা unprivileged_app SELinux ডোমেন করে না)
- অবিশ্বস্ত ইনপুট প্রক্রিয়া ( দুই নিয়ম )
- গ্রহণযোগ্য কর্মক্ষমতা মন্থর (মন্থরতা ব্যবহারকারীর দৃশ্যমান বিলম্ব তৈরি করে না)
আমরা উপরে উল্লিখিত মানদণ্ড অনুসরণ করে আরও উপাদানের জন্য MTE সক্ষম করতে বিক্রেতাদের উৎসাহিত করি। বিকাশের সময় আমরা এই উপাদানগুলিকে SYNC মোড ব্যবহার করে পরীক্ষা করার পরামর্শ দিই, সহজে সংশোধন করা বাগগুলি সনাক্ত করতে এবং তাদের কর্মক্ষমতার উপর ASYNC প্রভাব মূল্যায়ন করতে।
ভবিষ্যতে, অ্যান্ড্রয়েড আসন্ন হার্ডওয়্যার ডিজাইনের পারফরম্যান্স বৈশিষ্ট্য দ্বারা পরিচালিত, MTE সক্রিয় করা সিস্টেম উপাদানগুলির তালিকা প্রসারিত করার পরিকল্পনা করছে।