SELinux নীতি তৈরি করুন

এই পৃষ্ঠায় SELinux নীতি কীভাবে তৈরি করা হয় তা আলোচনা করা হয়েছে। SELinux নীতিটি মূল AOSP নীতি (প্ল্যাটফর্ম) এবং ডিভাইস-নির্দিষ্ট নীতি (বিক্রেতা) এর সংমিশ্রণ থেকে তৈরি করা হয়েছে। Android 4.4 থেকে Android 7.0 এর জন্য SELinux নীতি বিল্ড ফ্লো সমস্ত sepolicy টুকরা একত্রিত করে তারপর রুট ডিরেক্টরিতে একচেটিয়া ফাইল তৈরি করে। এর অর্থ হল SoC বিক্রেতারা এবং ODM নির্মাতারা প্রতিবার নীতি পরিবর্তন করার সময় boot.img (অ-A/B ডিভাইসের জন্য) বা system.img (A/B ডিভাইসের জন্য) পরিবর্তন করেছেন।

অ্যান্ড্রয়েড ৮.০ এবং তার পরবর্তী সংস্করণে, প্ল্যাটফর্ম এবং বিক্রেতা নীতি আলাদাভাবে তৈরি করা হয়। SoC এবং OEM গুলি নীতির তাদের অংশগুলি আপডেট করতে পারে, তাদের ছবি তৈরি করতে পারে (যেমন vendor.img এবং boot.img ), তারপর প্ল্যাটফর্ম আপডেট ছাড়াই সেই ছবিগুলি আপডেট করতে পারে।

তবে, যেহেতু মডুলারাইজড SELinux পলিসি ফাইলগুলি /vendor পার্টিশনে সংরক্ষণ করা হয়, তাই init প্রক্রিয়াটিকে system এবং ভেন্ডর পার্টিশনগুলি আগে মাউন্ট করতে হবে যাতে এটি সেই পার্টিশনগুলি থেকে SELinux ফাইলগুলি পড়তে পারে এবং system ডিরেক্টরিতে (কার্নেলে লোড করার আগে) কোর SELinux ফাইলগুলির সাথে মার্জ করতে পারে।

উৎস ফাইল

SELinux তৈরির যুক্তি এই ফাইলগুলিতে রয়েছে:

  • external/selinux : বাহ্যিক SELinux প্রকল্প, যা SELinux নীতি এবং লেবেল কম্পাইল করার জন্য HOST কমান্ড লাইন ইউটিলিটি তৈরি করতে ব্যবহৃত হয়।
    • external/selinux/libselinux : অ্যান্ড্রয়েড কিছু অ্যান্ড্রয়েড-নির্দিষ্ট কাস্টমাইজেশনের সাথে শুধুমাত্র বহিরাগত libselinux প্রকল্পের একটি উপসেট ব্যবহার করে। বিস্তারিত জানার জন্য, external/selinux/README.android দেখুন।
    • external/selinux/libsepol :
      • chkcon : একটি প্রদত্ত বাইনারি নীতির (হোস্ট এক্সিকিউটেবল) জন্য একটি নিরাপত্তা প্রেক্ষাপট বৈধ কিনা তা নির্ধারণ করুন।
      • libsepol : বাইনারি নিরাপত্তা নীতি (হোস্ট স্ট্যাটিক/শেয়ার্ড লাইব্রেরি, টার্গেট স্ট্যাটিক লাইব্রেরি) পরিচালনার জন্য SELinux লাইব্রেরি।
    • external/selinux/checkpolicy : SELinux পলিসি কম্পাইলার (হোস্ট এক্সিকিউটেবল: checkpolicy , checkmodule , এবং dispol )। libsepol উপর নির্ভর করে।
  • system/sepolicy : কোর অ্যান্ড্রয়েড SELinux পলিসি কনফিগারেশন, প্রসঙ্গ এবং পলিসি ফাইল সহ। মেজর সিপলিসি বিল্ড লজিকও এখানে রয়েছে ( system/sepolicy/Android.mk )।

system/sepolicy এর ফাইল সম্পর্কে আরও তথ্যের জন্য, Key files দেখুন।

অ্যান্ড্রয়েড ৭.এক্স এবং তার নিচের ভার্সন

এই বিভাগে Android 7.x এবং তার নিচের সংস্করণগুলিতে SELinux নীতি কীভাবে তৈরি করা হয় তা আলোচনা করা হয়েছে।

অ্যান্ড্রয়েড ৭.এক্স এবং তার আগের ভার্সনের জন্য তৈরির প্রক্রিয়া

SELinux নীতিটি মূল AOSP নীতি এবং ডিভাইস-নির্দিষ্ট কাস্টমাইজেশন একত্রিত করে তৈরি করা হয়। এরপর সম্মিলিত নীতিটি পলিসি কম্পাইলার এবং বিভিন্ন চেকারের কাছে প্রেরণ করা হয়। ডিভাইস-নির্দিষ্ট কাস্টমাইজেশন ডিভাইস-নির্দিষ্ট Boardconfig.mk ফাইলে সংজ্ঞায়িত BOARD_SEPOLICY_DIRS ভেরিয়েবলের মাধ্যমে করা হয়। এই গ্লোবাল বিল্ড ভেরিয়েবলটিতে এমন ডিরেক্টরিগুলির একটি তালিকা রয়েছে যা অতিরিক্ত পলিসি ফাইলগুলি অনুসন্ধান করার ক্রম নির্দিষ্ট করে।

উদাহরণস্বরূপ, একটি SoC বিক্রেতা এবং একটি ODM প্রতিটি একটি ডিরেক্টরি যোগ করতে পারে, একটি SoC-নির্দিষ্ট সেটিংসের জন্য এবং অন্যটি ডিভাইস-নির্দিষ্ট সেটিংসের জন্য, একটি নির্দিষ্ট ডিভাইসের জন্য চূড়ান্ত SELinux কনফিগারেশন তৈরি করতে:

  • BOARD_SEPOLICY_DIRS += device/ SoC /common/sepolicy
  • BOARD_SEPOLICY_DIRS += device/ SoC / DEVICE /sepolicy

system/sepolicy এবং BOARD_SEPOLICY_DIRS এ থাকা file_contexts ফাইলের বিষয়বস্তু ডিভাইসে file_contexts.bin তৈরি করার জন্য সংযুক্ত করা হয়েছে:

অ্যান্ড্রয়েড ৭.x এর জন্য SELinux বিল্ড লজিক

চিত্র ১. SELinux বিল্ড লজিক।

sepolicy ফাইলটিতে একাধিক উৎস ফাইল থাকে:

  • প্লেইন টেক্সট policy.conf তৈরি করা হয় security_classes , initial_sids , *.te ফাইল, genfs_contexts , এবং port_contexts কে এই ক্রমে সংযুক্ত করে।
  • প্রতিটি ফাইলের (যেমন security_classes ) জন্য, এর বিষয়বস্তু হল system/sepolicy/ এবং BOARDS_SEPOLICY_DIRS এর অধীনে একই নামের ফাইলগুলির সংমিশ্রণ।
  • policy.conf সিনট্যাক্স পরীক্ষার জন্য SELinux কম্পাইলারে পাঠানো হয় এবং ডিভাইসে sepolicy হিসাবে বাইনারি ফর্ম্যাটে কম্পাইল করা হয়।

    Android 7.x এর জন্য SELinux নীতি ফাইল তৈরি করে এমন ফাইলগুলি
    চিত্র ২। SELinux নীতি ফাইল।

SELinux ফাইল

কম্পাইল করার পর, 7.x এবং তার আগের সংস্করণে চলমান অ্যান্ড্রয়েড ডিভাইসগুলিতে সাধারণত নিম্নলিখিত SELinux-সম্পর্কিত ফাইল থাকে:

  • selinux_version
  • sepolicy : পলিসি ফাইল (যেমন security_classes , initial_sids , এবং *.te ) একত্রিত করার পরে বাইনারি আউটপুট।
  • file_contexts
  • property_contexts
  • seapp_contexts
  • service_contexts
  • system/etc/mac_permissions.xml

আরও বিস্তারিত জানার জন্য, SELinux বাস্তবায়ন দেখুন।

SELinux আরম্ভকরণ

যখন সিস্টেম বুট হয়, তখন SELinux অনুমতিমূলক মোডে থাকে (এবং প্রয়োগকারী মোডে নয়)। init প্রক্রিয়া নিম্নলিখিত কাজগুলি সম্পাদন করে:

  • /sys/fs/selinux/load এর মাধ্যমে ramdisk থেকে কার্নেলে sepolicy ফাইল লোড করে।
  • SELinux কে এনফোর্সিং মোডে স্যুইচ করে।
  • SELinux ডোমেইন নিয়ম নিজেই প্রয়োগ করতে re-exec() চালায়।

বুট টাইম কমাতে, যত তাড়াতাড়ি সম্ভব init প্রক্রিয়ায় re-exec() করুন।

অ্যান্ড্রয়েড ৮.০ এবং উচ্চতর

অ্যান্ড্রয়েড ৮.০-এ, SELinux নীতিটি প্ল্যাটফর্ম এবং বিক্রেতা উপাদানগুলিতে বিভক্ত করা হয়েছে যাতে সামঞ্জস্য বজায় রেখে স্বাধীন প্ল্যাটফর্ম এবং বিক্রেতা নীতি আপডেট করা যায়।

প্ল্যাটফর্ম সিপলিসিকে আরও প্ল্যাটফর্ম প্রাইভেট এবং প্ল্যাটফর্ম পাবলিক পার্টসে বিভক্ত করা হয়েছে যাতে নির্দিষ্ট ধরণের এবং বৈশিষ্ট্যগুলি বিক্রেতা নীতি লেখকদের কাছে রপ্তানি করা যায়। প্ল্যাটফর্ম পাবলিক টাইপ/অ্যাট্রিবিউটগুলি একটি নির্দিষ্ট প্ল্যাটফর্ম সংস্করণের জন্য স্থিতিশীল API হিসাবে রক্ষণাবেক্ষণের নিশ্চয়তা দেওয়া হয়। প্ল্যাটফর্ম ম্যাপিং ফাইল ব্যবহার করে বিভিন্ন সংস্করণের জন্য পূর্ববর্তী প্ল্যাটফর্ম পাবলিক টাইপ/অ্যাট্রিবিউটের সাথে সামঞ্জস্য নিশ্চিত করা যেতে পারে।

অ্যান্ড্রয়েড ৮.০ এর জন্য তৈরির প্রক্রিয়া

অ্যান্ড্রয়েড ৮.০-এ SELinux নীতি /system এবং /vendor থেকে অংশগুলিকে একত্রিত করে তৈরি করা হয়েছে। এটি সঠিকভাবে সেট আপ করার যুক্তি /platform/system/sepolicy/Android.bp এ রয়েছে।

নীতিটি নিম্নলিখিত স্থানে বিদ্যমান:

স্থান ধারণ করে
system/sepolicy/public প্ল্যাটফর্ম সিপলিসি এপিআই
system/sepolicy/private প্ল্যাটফর্ম বাস্তবায়নের বিশদ বিবরণ (বিক্রেতারা উপেক্ষা করতে পারেন)
system/sepolicy/vendor নীতি এবং প্রসঙ্গ ফাইল যা বিক্রেতারা ব্যবহার করতে পারেন (বিক্রেতারা উপেক্ষা করতে পারেন)
BOARD_SEPOLICY_DIRS বিক্রেতা নীতিমালা
BOARD_ODM_SEPOLICY_DIRS (অ্যান্ড্রয়েড 9 এবং উচ্চতর) ওডিএম সিপলিসি
SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS (অ্যান্ড্রয়েড ১১ এবং উচ্চতর) system_ext sepolicy API
SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS (Android 11 এবং উচ্চতর) system_ext বাস্তবায়নের বিবরণ (বিক্রেতারা উপেক্ষা করতে পারেন)
PRODUCT_PUBLIC_SEPOLICY_DIRS (অ্যান্ড্রয়েড ১১ এবং উচ্চতর) পণ্য সেপলিসি এপিআই
PRODUCT_PRIVATE_SEPOLICY_DIRS (অ্যান্ড্রয়েড ১১ এবং উচ্চতর) পণ্য বাস্তবায়নের বিবরণ (বিক্রেতারা উপেক্ষা করতে পারেন)

বিল্ড সিস্টেম এই নীতি গ্রহণ করে এবং সংশ্লিষ্ট পার্টিশনে system , system_ext , product , vendor , এবং odm নীতি উপাদান তৈরি করে। ধাপগুলির মধ্যে রয়েছে:

  1. নীতিমালাগুলিকে SELinux Common Intermediate Language (CIL) ফর্ম্যাটে রূপান্তর করুন, বিশেষ করে:
    • পাবলিক প্ল্যাটফর্ম নীতি ( system , system_ext , product )
    • সম্মিলিত বেসরকারি ও সরকারি নীতি
    • পাবলিক, বিক্রেতা এবং BOARD_SEPOLICY_DIRS নীতি
  2. বিক্রেতা নীতির অংশ হিসেবে জনসাধারণের দ্বারা প্রদত্ত নীতিটি সংস্করণ করুন। প্ল্যাটফর্ম নীতির সাথে সংযুক্ত কোন অংশগুলিকে বৈশিষ্ট্যে রূপান্তর করতে হবে তা সম্মিলিত জনসাধারণ এবং বিক্রেতা এবং BOARD_SEPOLICY_DIRS নীতিকে অবহিত করতে উৎপাদিত জনসাধারণের CIL নীতি ব্যবহার করুন।
  3. প্ল্যাটফর্ম এবং বিক্রেতার অংশগুলিকে সংযুক্ত করে একটি ম্যাপিং ফাইল তৈরি করুন। প্রাথমিকভাবে, এটি কেবল পাবলিক পলিসির ধরণগুলিকে বিক্রেতা নীতিতে সংশ্লিষ্ট বৈশিষ্ট্যগুলির সাথে সংযুক্ত করে; পরবর্তীতে এটি ভবিষ্যতের প্ল্যাটফর্ম সংস্করণগুলিতে রক্ষণাবেক্ষণ করা ফাইলের ভিত্তিও প্রদান করে, যা এই প্ল্যাটফর্ম সংস্করণটিকে লক্ষ্য করে বিক্রেতা নীতির সাথে সামঞ্জস্যপূর্ণ করে তোলে।
  4. নীতি ফাইলগুলি একত্রিত করুন (ডিভাইসের উপর এবং পূর্বে কম্পাইল করা সমাধান উভয়ের বর্ণনা দিন)।
    1. ম্যাপিং, প্ল্যাটফর্ম এবং বিক্রেতা নীতি একত্রিত করুন।
    2. আউটপুট বাইনারি পলিসি ফাইল কম্পাইল করুন।

প্ল্যাটফর্ম পাবলিক পলিসি

প্ল্যাটফর্ম পাবলিক সিপলিসিতে system/sepolicy/public এর অধীনে সংজ্ঞায়িত সবকিছু অন্তর্ভুক্ত থাকে। প্ল্যাটফর্মটি ধরে নিতে পারে যে পাবলিক পলিসির অধীনে সংজ্ঞায়িত প্রকার এবং বৈশিষ্ট্যগুলি একটি নির্দিষ্ট প্ল্যাটফর্ম সংস্করণের জন্য স্থিতিশীল API। এটি সিপলিসির সেই অংশ গঠন করে যা প্ল্যাটফর্ম দ্বারা রপ্তানি করা হয় যেখানে বিক্রেতা (অর্থাৎ, ডিভাইস) নীতি বিকাশকারীরা অতিরিক্ত ডিভাইস-নির্দিষ্ট নীতি লিখতে পারেন।

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

প্ল্যাটফর্ম প্রাইভেট সিপলিসি

প্ল্যাটফর্ম প্রাইভেট সিপলিসিতে /system/sepolicy/private এর অধীনে সংজ্ঞায়িত সবকিছু অন্তর্ভুক্ত থাকে। নীতির এই অংশটি প্ল্যাটফর্ম কার্যকারিতার জন্য প্রয়োজনীয় প্ল্যাটফর্ম-কেবল প্রকার, অনুমতি এবং বৈশিষ্ট্য তৈরি করে। এগুলি বিক্রেতা এবং ডিভাইস নীতি লেখকদের কাছে রপ্তানি করা হয় না। নন-প্ল্যাটফর্ম নীতি লেখকদের প্ল্যাটফর্ম প্রাইভেট সিপলিসিতে সংজ্ঞায়িত প্রকার, বৈশিষ্ট্য এবং নিয়মের উপর ভিত্তি করে তাদের নীতি এক্সটেনশন লিখতে হবে না। অধিকন্তু, এই নিয়মগুলি পরিবর্তন করার অনুমতি রয়েছে অথবা একটি ফ্রেমওয়ার্ক-কেবল আপডেটের অংশ হিসাবে অদৃশ্য হয়ে যেতে পারে।

প্ল্যাটফর্মের ব্যক্তিগত ম্যাপিং

প্ল্যাটফর্ম প্রাইভেট ম্যাপিং-এ নীতি বিবৃতি অন্তর্ভুক্ত থাকে যা পূর্ববর্তী প্ল্যাটফর্ম সংস্করণের প্ল্যাটফর্ম পাবলিক পলিসিতে প্রকাশিত বৈশিষ্ট্যগুলিকে বর্তমান প্ল্যাটফর্ম পাবলিক পলিসিতে ব্যবহৃত নির্দিষ্ট ধরণের সাথে ম্যাপ করে। এটি নিশ্চিত করে যে পূর্ববর্তী প্ল্যাটফর্ম পাবলিক পলিসি সংস্করণগুলির প্ল্যাটফর্ম পাবলিক অ্যাট্রিবিউটের উপর ভিত্তি করে লেখা বিক্রেতা নীতি কাজ করে চলেছে। সংস্করণটি একটি নির্দিষ্ট প্ল্যাটফর্ম সংস্করণের জন্য AOSP-তে PLATFORM_SEPOLICY_VERSION বিল্ড ভেরিয়েবল সেটের উপর ভিত্তি করে তৈরি। প্রতিটি পূর্ববর্তী প্ল্যাটফর্ম সংস্করণের জন্য একটি পৃথক ম্যাপিং ফাইল বিদ্যমান যেখান থেকে এই প্ল্যাটফর্মটি বিক্রেতা নীতি গ্রহণ করবে বলে আশা করা হচ্ছে। আরও বিস্তারিত জানার জন্য, নীতি সামঞ্জস্যতা দেখুন।

অ্যান্ড্রয়েড ১১ এবং উচ্চতর

এই বিভাগে Android 11 এবং উচ্চতর সংস্করণে SELinux নীতি কীভাবে তৈরি করা হয় তা আলোচনা করা হয়েছে।

system_ext এবং পণ্য নীতি

অ্যান্ড্রয়েড ১১-এ, system_ext নীতি এবং product নীতি যোগ করা হয়েছে। প্ল্যাটফর্ম sepolicy-এর মতো, system_ext নীতি এবং product নীতি পাবলিক নীতি এবং প্রাইভেট নীতিতে বিভক্ত।

পাবলিক পলিসি বিক্রেতার কাছে রপ্তানি করা হয়। টাইপ এবং অ্যাট্রিবিউট স্থিতিশীল API হয়ে যায়, এবং ভেন্ডর পলিসি পাবলিক পলিসির টাইপ এবং অ্যাট্রিবিউটগুলিকে উল্লেখ করতে পারে। টাইপগুলি PLATFORM_SEPOLICY_VERSION অনুসারে ভার্সন করা হয়, এবং ভার্সন করা পলিসিটি বিক্রেতার পলিসিতে অন্তর্ভুক্ত করা হয়। মূল পলিসিটি system_ext এবং product পার্টিশনের প্রতিটিতে অন্তর্ভুক্ত করা হয়।

প্রাইভেট পলিসিতে system_ext -only এবং product -only প্রকার, অনুমতি এবং system_ext এবং product পার্টিশন কার্যকারিতার জন্য প্রয়োজনীয় বৈশিষ্ট্য রয়েছে। প্রাইভেট পলিসি বিক্রেতার কাছে অদৃশ্য, যার অর্থ এই নিয়মগুলি অভ্যন্তরীণ এবং পরিবর্তন করার অনুমতি রয়েছে।

system_ext এবং পণ্য ম্যাপিং

system_ext এবং product তাদের নির্ধারিত পাবলিক টাইপ বিক্রেতার কাছে রপ্তানি করতে পারবে। তবে, প্রতিটি অংশীদারের দায়িত্ব সামঞ্জস্য বজায় রাখা। সামঞ্জস্যের জন্য, অংশীদাররা তাদের নিজস্ব ম্যাপিং ফাইল সরবরাহ করতে পারে যা পূর্ববর্তী সংস্করণগুলির সংস্করণযুক্ত বৈশিষ্ট্যগুলিকে বর্তমান পাবলিক পলিসিতে ব্যবহৃত নির্দিষ্ট ধরণের সাথে ম্যাপ করে:

  • system_ext এর জন্য একটি ম্যাপিং ফাইল ইনস্টল করতে, {SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS}/compat/{ver}/{ver}.cil এ কাঙ্ক্ষিত ম্যাপিং তথ্য সম্বলিত একটি CIL ফাইল রাখুন, এবং তারপর PRODUCT_PACKAGESsystem_ext_{ver}.cil যোগ করুন।
  • product এর জন্য একটি ম্যাপিং ফাইল ইনস্টল করতে, {PRODUCT_PRIVATE_SEPOLICY_DIRS}/compat/{ver}/{ver}.cil এ কাঙ্ক্ষিত ম্যাপিং তথ্য সম্বলিত একটি CIL ফাইল রাখুন, এবং তারপর product_{ver}.cil কে PRODUCT_PACKAGES এ যোগ করুন।

একটি উদাহরণ দেখুন যেখানে একটি Redbull ডিভাইসের product পার্টিশনের একটি ম্যাপিং ফাইল যোগ করা হয়েছে।

পূর্ব-সংকলিত SELinux নীতি

init SELinux চালু করার আগে, init পার্টিশন ( system , system_ext , product , vendor এবং odm ) থেকে সমস্ত CIL ফাইল সংগ্রহ করে এবং বাইনারি পলিসিতে কম্পাইল করে, যে ফর্ম্যাটটি কার্নেলে লোড করা যায়। যেহেতু কম্পাইলেশনে সময় লাগে (সাধারণত ১-২ সেকেন্ড), তাই CIL ফাইলগুলি বিল্ড টাইমে প্রি-কম্পাইল করা হয় এবং /vendor/etc/selinux/precompiled_sepolicy অথবা /odm/etc/selinux/precompiled_sepolicy এ স্থাপন করা হয়, ইনপুট CIL ফাইলগুলির sha256 হ্যাশ সহ। রানটাইমে, init হ্যাশগুলির তুলনা করে কোনও পলিসি ফাইল আপডেট করা হয়েছে কিনা তা পরীক্ষা করে। যদি কোনও পরিবর্তন না হয়, init প্রি-কম্পাইল করা পলিসি লোড করে। যদি না হয়, তাহলে init তাৎক্ষণিকভাবে কম্পাইল করে এবং প্রি-কম্পাইল করা পলিসির পরিবর্তে এটি ব্যবহার করে।

আরও স্পষ্টভাবে বলতে গেলে, নিম্নলিখিত সমস্ত শর্ত পূরণ হলে প্রিকম্পাইলড পলিসি ব্যবহার করা হয়। এখানে, {partition} সেই পার্টিশনকে প্রতিনিধিত্ব করে যেখানে প্রিকম্পাইলড পলিসি বিদ্যমান: হয় vendor অথবা odm

  • /system/etc/selinux/plat_sepolicy_and_mapping.sha256 এবং /{partition}/etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256 উভয়ই বিদ্যমান এবং অভিন্ন।
  • /system_ext/etc/selinux/system_ext_sepolicy_and_mapping.sha256 এবং /{partition}/etc/selinux/precompiled_sepolicy.system_ext_sepolicy_and_mapping.sha256 উভয়ই বিদ্যমান নেই। অথবা উভয়ই বিদ্যমান এবং অভিন্ন।
  • /product/etc/selinux/product_sepolicy_and_mapping.sha256 এবং /{partition}/etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256 উভয়ই বিদ্যমান নেই। অথবা উভয়ই বিদ্যমান এবং অভিন্ন।

যদি তাদের মধ্যে কোনটি ভিন্ন হয়, তাহলে init ডিভাইসের অন-কম্পাইলেশন পাথে ফিরে যাবে। আরও বিস্তারিত জানার জন্য system/core/init/selinux.cpp দেখুন।