27 মার্চ, 2025 থেকে, আমরা AOSP তৈরি করতে এবং অবদান রাখতে aosp-main
এর পরিবর্তে android-latest-release
ব্যবহার করার পরামর্শ দিচ্ছি। আরও তথ্যের জন্য, AOSP-তে পরিবর্তনগুলি দেখুন।
কার্নেল নিয়ন্ত্রণ প্রবাহ অখণ্ডতা
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
কন্ট্রোল ফ্লো ইন্টিগ্রিটি (CFI) হল একটি নিরাপত্তা ব্যবস্থা যা একটি সংকলিত বাইনারির মূল কন্ট্রোল ফ্লো গ্রাফে পরিবর্তনের অনুমতি দেয় না, যা এই ধরনের আক্রমণগুলি সম্পাদন করাকে উল্লেখযোগ্যভাবে কঠিন করে তোলে।
অ্যান্ড্রয়েড 9-এ, আমরা LLVM-এর সিএফআই-এর বাস্তবায়ন আরও উপাদানে এবং কার্নেলে সক্ষম করেছি। সিস্টেম CFI ডিফল্টরূপে চালু আছে, কিন্তু আপনাকে কার্নেল CFI সক্রিয় করতে হবে।
LLVM-এর CFI-এর জন্য Link-Time Optimization (LTO) দিয়ে কম্পাইল করা প্রয়োজন। LTO লিঙ্ক-টাইম পর্যন্ত অবজেক্ট ফাইলগুলির LLVM বিটকোড উপস্থাপনা সংরক্ষণ করে, যা কম্পাইলারকে কী অপ্টিমাইজেশানগুলি সঞ্চালিত করা যেতে পারে সে সম্পর্কে আরও ভাল কারণ জানাতে দেয়। LTO সক্রিয় করা চূড়ান্ত বাইনারি আকার হ্রাস করে এবং কর্মক্ষমতা উন্নত করে, কিন্তু কম্পাইলের সময় বাড়ায়। অ্যান্ড্রয়েডে পরীক্ষায়, এলটিও এবং সিএফআই-এর সংমিশ্রণের ফলে কোডের আকার এবং কার্যকারিতা নগণ্য ওভারহেড হয়; কিছু ক্ষেত্রে উভয়ের উন্নতি হয়েছে।
CFI সম্পর্কে আরও প্রযুক্তিগত বিশদ এবং কীভাবে অন্যান্য ফরোয়ার্ড-কন্ট্রোল চেকগুলি পরিচালনা করা হয়, LLVM ডিজাইন ডকুমেন্টেশন দেখুন।
বাস্তবায়ন
kCFI প্যাচগুলি সমস্ত সমর্থিত অ্যান্ড্রয়েড কার্নেল সংস্করণে রয়েছে৷ CONFIG_CFI_CLANG
বিকল্পটি kCFI সক্ষম করে এবং ডিফল্টরূপে GKI তে সেট করা থাকে।
সমস্যা সমাধান
সক্ষম করার পরে, তাদের ড্রাইভারের সাথে বিদ্যমান যেকোন ধরনের অমিল ত্রুটির মাধ্যমে কাজ করুন। একটি বেমানান ফাংশন পয়েন্টার ট্রিপ CFI এর মাধ্যমে একটি পরোক্ষ ফাংশন কল। যখন একটি CFI ব্যর্থতা সনাক্ত করা হয়, কার্নেল একটি সতর্কতা প্রিন্ট করে যাতে কল করা ফাংশন এবং স্ট্যাকট্রেস যা ব্যর্থতার দিকে পরিচালিত করে উভয়ই অন্তর্ভুক্ত করে। ফাংশন পয়েন্টার সবসময় যে ফাংশন বলা হয় একই ধরনের আছে নিশ্চিত করে এটি সংশোধন করুন।
CFI ব্যর্থতা ডিবাগ করতে সহায়তা করার জন্য, CONFIG_CFI_PERMISSIVE
সক্রিয় করুন, যা কার্নেল প্যানিকের পরিবর্তে একটি সতর্কতা প্রিন্ট করে। অনুমতিমূলক মোড উত্পাদন ব্যবহার করা উচিত নয়.
বৈধতা
বর্তমানে, CFI-এর জন্য বিশেষভাবে কোনো CTS পরীক্ষা নেই। পরিবর্তে, নিশ্চিত করুন যে CFI ডিভাইসটিকে প্রভাবিত করছে না তা যাচাই করার জন্য CFI সক্ষম করা ছাড়াই CTS পরীক্ষাগুলি পাস করেছে।
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Kernel control flow integrity\n\n[Control flow\nintegrity](https://clang.llvm.org/docs/ControlFlowIntegrity.html) (CFI) is a security mechanism that disallows changes to the\noriginal control flow graph of a compiled binary, making it significantly harder\nto perform such attacks.\n\n\nIn Android 9, we enabled LLVM's implementation of CFI in more components and\nalso in the kernel. [System CFI](/docs/security/test/cfi) is on by\ndefault, but you need to enable kernel CFI.\n\n\nLLVM's CFI requires compiling with [Link-Time Optimization\n(LTO)](https://llvm.org/docs/LinkTimeOptimization.html). LTO preserves the LLVM bitcode representation of object files until\nlink-time, which allows the compiler to better reason about what optimizations\ncan be performed. Enabling LTO reduces the size of the final binary and improves\nperformance, but increases compile time. In testing on Android, the combination\nof LTO and CFI results in negligible overhead to code size and performance; in a\nfew cases both improved.\n\n\nFor more technical details about CFI and how other forward-control checks are\nhandled, see the [LLVM design\ndocumentation](https://clang.llvm.org/docs/ControlFlowIntegrityDesign.html).\n\nImplementation\n--------------\n\n\nThe kCFI patches are in all supported Android kernel versions. The `CONFIG_CFI_CLANG `\noption enables kCFI and is set by default in GKI.\n\n### Troubleshooting\n\n\nAfter enabling, work through any type mismatch errors that may exist with their\ndrivers. An indirect function call through an incompatible function pointer\ntrips CFI. When a CFI failure is detected, the kernel prints out a warning that\nincludes both the function that was called and the stacktrace that led to the\nfailure. Correct this by ensuring function pointers always have the same type as\nthe function that's called.\n\n\nTo assist in debugging CFI failures, enable `CONFIG_CFI_PERMISSIVE`,\nwhich prints out a warning instead of causing a kernel panic. Permissive mode\nmust not be used in production.\n\nValidation\n----------\n\n\nCurrently, there are no CTS test specifically for CFI. Instead, make sure that\nCTS tests pass with and without CFI enabled to verify that CFI isn't impacting\nthe device."]]