AVF আর্কিটেকচার

Android ভার্চুয়ালাইজেশন ফ্রেমওয়ার্ক বাস্তবায়নের জন্য প্রয়োজনীয় সমস্ত উপাদানগুলির একটি রেফারেন্স বাস্তবায়ন প্রদান করে। বর্তমানে এই বাস্তবায়ন ARM64 এর মধ্যে সীমাবদ্ধ। এই পৃষ্ঠাটি ফ্রেমওয়ার্ক আর্কিটেকচার ব্যাখ্যা করে।

পটভূমি

আর্ম আর্কিটেকচার চারটি ব্যতিক্রম লেভেল পর্যন্ত অনুমতি দেয়, ব্যতিক্রম লেভেল 0 (EL0) সবচেয়ে কম সুবিধাপ্রাপ্ত এবং ব্যতিক্রম লেভেল 3 (EL3) সর্বাধিক। অ্যান্ড্রয়েড কোডবেসের সবচেয়ে বড় অংশ (সমস্ত ইউজারস্পেস উপাদান) EL0 এ চলে। বাকি যাকে সাধারণত "Android" বলা হয় তা হল Linux কার্নেল, যা EL1 এ চলে।

EL2 স্তর একটি হাইপারভাইজার প্রবর্তনের অনুমতি দেয় যা শক্তিশালী গোপনীয়তা এবং অখণ্ডতার গ্যারান্টি সহ EL1/EL0-এ পৃথক পিভিএম-এ মেমরি এবং ডিভাইসগুলিকে আলাদা করতে সক্ষম করে।

হাইপারভাইজার

সুরক্ষিত কার্নেল-ভিত্তিক ভার্চুয়াল মেশিন (pKVM) Linux KVM হাইপারভাইজারের উপর নির্মিত, যা নির্মাণের সময় 'সুরক্ষিত' চিহ্নিত গেস্ট ভার্চুয়াল মেশিনে চলমান পেলোডগুলিতে অ্যাক্সেস সীমাবদ্ধ করার ক্ষমতা সহ প্রসারিত করা হয়েছে।

KVM/arm64 নির্দিষ্ট CPU বৈশিষ্ট্যের প্রাপ্যতার উপর নির্ভর করে বিভিন্ন এক্সিকিউশন মোড সমর্থন করে, যথা, ভার্চুয়ালাইজেশন হোস্ট এক্সটেনশন (VHE) (ARMv8.1 এবং পরবর্তী)। এই মোডগুলির মধ্যে একটিতে, যা সাধারণত নন-ভিএইচই মোড হিসাবে পরিচিত, হাইপারভাইজার কোডটি বুট করার সময় কার্নেল ইমেজ থেকে বিভক্ত হয় এবং EL2 এ ইনস্টল করা হয়, যেখানে কার্নেল নিজেই EL1 এ চলে। যদিও লিনাক্স কোডবেসের অংশ, KVM-এর EL2 উপাদান হল একটি ছোট উপাদান যা একাধিক EL1-এর মধ্যে স্যুইচের দায়িত্বে থাকে এবং সম্পূর্ণরূপে হোস্টের কার্নেল দ্বারা নিয়ন্ত্রিত হয়। হাইপারভাইজার কম্পোনেন্ট লিনাক্সের সাথে কম্পাইল করা হয়, কিন্তু vmlinux ইমেজের একটি আলাদা, ডেডিকেটেড মেমরি বিভাগে থাকে। pKVM নতুন বৈশিষ্ট্য সহ হাইপারভাইজার কোড প্রসারিত করে এটিকে অ্যান্ড্রয়েড হোস্ট কার্নেল এবং ব্যবহারকারীর স্থানের উপর বিধিনিষেধ আরোপ করার অনুমতি দেয় এবং অতিথি মেমরি এবং হাইপারভাইজারে হোস্ট অ্যাক্সেস সীমিত করে এই ডিজাইনটি লাভ করে।

pKVM বিক্রেতা মডিউল

একটি pKVM ভেন্ডর মডিউল হল একটি হার্ডওয়্যার-নির্দিষ্ট মডিউল যাতে ডিভাইস-নির্দিষ্ট কার্যকারিতা থাকে, যেমন ইনপুট-আউটপুট মেমরি ম্যানেজমেন্ট ইউনিট (IOMMU) ড্রাইভার। এই মডিউলগুলি আপনাকে নিরাপত্তা বৈশিষ্ট্যগুলিকে পোর্ট করতে দেয় যার জন্য ব্যতিক্রম স্তর 2 (EL2) pKVM-এ অ্যাক্সেস প্রয়োজন।

কিভাবে একটি pKVM ভেন্ডর মডিউল বাস্তবায়ন এবং লোড করতে হয় তা জানতে, একটি pKVM ভেন্ডর মডিউল প্রয়োগ করুন।

বুট পদ্ধতি

নিচের চিত্রে pKVM বুট পদ্ধতি দেখানো হয়েছে:

pKVM বুট পদ্ধতি

চিত্র 1. pKVM বুট পদ্ধতি

  1. বুটলোডার EL2 এ জেনেরিক কার্নেলে প্রবেশ করে।
  2. জেনেরিক কার্নেল সনাক্ত করে যে এটি EL2 এ চলছে এবং নিজেকে EL1 থেকে বঞ্চিত করে যখন pKVM এবং এর মডিউলগুলি EL2 এ চলতে থাকে। অতিরিক্তভাবে, pKVM ভেন্ডর মডিউলগুলি এই সময়ে লোড করা হয়।
  3. জেনেরিক কার্নেলটি স্বাভাবিকভাবে বুট করার জন্য এগিয়ে যায়, ব্যবহারকারীর স্থান না পৌঁছানো পর্যন্ত সমস্ত প্রয়োজনীয় ডিভাইস ড্রাইভার লোড করে। এই মুহুর্তে, pKVM জায়গায় আছে এবং স্টেজ-2 পৃষ্ঠার টেবিলগুলি পরিচালনা করে।

বুট পদ্ধতিটি বুটলোডারকে বিশ্বাস করে শুধুমাত্র প্রাথমিক বুটের সময় কার্নেল ইমেজের অখণ্ডতা বজায় রাখতে। যখন কার্নেলটি বঞ্চিত হয়, তখন এটিকে হাইপারভাইজার দ্বারা আর বিশ্বস্ত বলে মনে করা হয় না, যা কার্নেলটি আপস করা হলেও নিজেকে রক্ষা করার জন্য দায়ী।

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

অধিকন্তু, অ্যান্ড্রয়েড ইকোসিস্টেমে জিকেআই গ্রহণ করা স্বয়ংক্রিয়ভাবে পিকেভিএম হাইপারভাইজারকে কার্নেলের মতো একই বাইনারিতে অ্যান্ড্রয়েড ডিভাইসে স্থাপন করার অনুমতি দেয়।

CPU মেমরি অ্যাক্সেস সুরক্ষা

আর্ম আর্কিটেকচার একটি মেমরি ম্যানেজমেন্ট ইউনিট (এমএমইউ) দুটি স্বাধীন পর্যায়ে বিভক্ত করে, যে দুটিরই ঠিকানা অনুবাদ এবং মেমরির বিভিন্ন অংশে অ্যাক্সেস নিয়ন্ত্রণ বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে। পর্যায় 1 MMU EL1 দ্বারা নিয়ন্ত্রিত হয় এবং এটি ঠিকানা অনুবাদের প্রথম স্তরের অনুমতি দেয়। পর্যায় 1 MMU প্রতিটি ইউজারস্পেস প্রক্রিয়া এবং তার নিজস্ব ভার্চুয়াল ঠিকানা স্থান প্রদান করা ভার্চুয়াল ঠিকানা স্থান পরিচালনা করতে Linux দ্বারা ব্যবহৃত হয়।

পর্যায় 2 MMU EL2 দ্বারা নিয়ন্ত্রিত হয় এবং পর্যায় 1 MMU-এর আউটপুট ঠিকানায় একটি দ্বিতীয় ঠিকানা অনুবাদের প্রয়োগ সক্ষম করে, যার ফলে একটি প্রকৃত ঠিকানা (PA) হয়। পর্যায় 2 অনুবাদটি হাইপারভাইজার দ্বারা সমস্ত গেস্ট ভিএম থেকে মেমরি অ্যাক্সেস নিয়ন্ত্রণ এবং অনুবাদ করতে ব্যবহার করা যেতে পারে। চিত্র 2-এ দেখানো হয়েছে, যখন অনুবাদের উভয় পর্যায়েই সক্ষম করা হয়, তখন পর্যায় 1-এর আউটপুট ঠিকানাকে একটি মধ্যবর্তী প্রকৃত ঠিকানা (IPA) বলা হয় নোট: ভার্চুয়াল ঠিকানা (VA) একটি IPA এবং তারপরে একটি PA-তে অনুবাদ করা হয়৷

CPU মেমরি অ্যাক্সেস সুরক্ষা

চিত্র 2. CPU মেমরি অ্যাক্সেস সুরক্ষা

ঐতিহাসিকভাবে, KVM গেস্ট চালানোর সময় স্টেজ 2 অনুবাদ সক্রিয় করা হয় এবং হোস্ট Linux কার্নেল চালানোর সময় স্টেজ 2 নিষ্ক্রিয় করা হয়। এই আর্কিটেকচারটি হোস্ট স্টেজ 1 MMU থেকে মেমরি অ্যাক্সেসকে পর্যায় 2 MMU এর মধ্য দিয়ে যাওয়ার অনুমতি দেয়, তাই হোস্ট থেকে অতিথি মেমরি পৃষ্ঠাগুলিতে সীমাহীন অ্যাক্সেসের অনুমতি দেয়। অন্যদিকে, pKVM হোস্ট প্রসঙ্গেও স্টেজ 2 সুরক্ষা সক্ষম করে, এবং হোস্টের পরিবর্তে গেস্ট মেমরি পৃষ্ঠাগুলি সুরক্ষিত করার দায়িত্বে হাইপারভাইজারকে রাখে।

গেস্টদের জন্য জটিল IPA/PA ম্যাপিং বাস্তবায়নের জন্য KVM পর্যায় 2-এ ঠিকানা অনুবাদের সম্পূর্ণ ব্যবহার করে, যা শারীরিক খণ্ডিত হওয়া সত্ত্বেও অতিথিদের জন্য সংলগ্ন মেমরির বিভ্রম তৈরি করে। যাইহোক, হোস্টের জন্য স্টেজ 2 MMU-এর ব্যবহার শুধুমাত্র অ্যাক্সেস কন্ট্রোলে সীমাবদ্ধ। হোস্ট পর্যায় 2 হল আইডেন্টিটি-ম্যাপ করা, হোস্ট আইপিএ স্পেসের সংলগ্ন মেমরি PA স্পেসে সংলগ্ন রয়েছে তা নিশ্চিত করে। এই আর্কিটেকচারটি পৃষ্ঠা টেবিলে বড় ম্যাপিং ব্যবহার করার অনুমতি দেয় এবং ফলস্বরূপ অনুবাদ লুকসাইড বাফার (TLB) এর উপর চাপ কমায়। যেহেতু একটি আইডেন্টিটি ম্যাপিং PA দ্বারা ইন্ডেক্স করা যায়, তাই হোস্ট স্টেজ 2 পৃষ্ঠার সারণীতে সরাসরি পৃষ্ঠার মালিকানা ট্র্যাক করতেও ব্যবহার করা হয়।

সরাসরি মেমরি অ্যাক্সেস (DMA) সুরক্ষা

পূর্বে বর্ণিত হিসাবে, CPU পৃষ্ঠা সারণীতে Linux হোস্ট থেকে গেস্ট পেজ আনম্যাপ করা গেস্ট মেমরি রক্ষার জন্য একটি প্রয়োজনীয় কিন্তু অপর্যাপ্ত পদক্ষেপ। হোস্ট কার্নেলের নিয়ন্ত্রণে থাকা DMA-সক্ষম ডিভাইসগুলির দ্বারা তৈরি মেমরি অ্যাক্সেস এবং ক্ষতিকারক হোস্ট দ্বারা শুরু হওয়া DMA আক্রমণের সম্ভাবনা থেকেও pKVM-কে রক্ষা করতে হবে। এই ধরনের ডিভাইসকে গেস্ট মেমরি অ্যাক্সেস করা থেকে আটকাতে, pKVM-এর প্রয়োজন ইনপুট-আউটপুট মেমরি ম্যানেজমেন্ট ইউনিট (IOMMU) সিস্টেমের প্রতিটি DMA-সক্ষম ডিভাইসের জন্য, যেমন চিত্র 3-এ দেখানো হয়েছে।

ডিএমএ মেমরি অ্যাক্সেস সুরক্ষা

চিত্র 3. ডিএমএ মেমরি অ্যাক্সেস সুরক্ষা

সর্বনিম্নভাবে, IOMMU হার্ডওয়্যার পৃষ্ঠা গ্রানুলারিটিতে একটি ডিভাইসের জন্য রিড/রাইট অ্যাক্সেস মঞ্জুর এবং প্রত্যাহার করার উপায় সরবরাহ করে। যাইহোক, এই IOMMU হার্ডওয়্যার pVM-এ ডিভাইসের ব্যবহার সীমিত করে কারণ তারা একটি পরিচয়-ম্যাপ করা পর্যায় 2 অনুমান করে।

ভার্চুয়াল মেশিনগুলির মধ্যে বিচ্ছিন্নতা নিশ্চিত করার জন্য, বিভিন্ন সত্তার পক্ষ থেকে তৈরি করা মেমরি লেনদেনগুলি অবশ্যই IOMMU দ্বারা আলাদা করা উচিত যাতে অনুবাদের জন্য পৃষ্ঠা টেবিলের উপযুক্ত সেট ব্যবহার করা যায়।

উপরন্তু, EL2-এ SoC-নির্দিষ্ট কোডের পরিমাণ হ্রাস করা pKVM-এর সামগ্রিক বিশ্বস্ত কম্পিউটিং বেস (TCB) কমানোর একটি মূল কৌশল এবং হাইপারভাইজারে IOMMU ড্রাইভারদের অন্তর্ভুক্তির বিপরীতে চলে। এই সমস্যাটি প্রশমিত করার জন্য, EL1-এর হোস্ট অক্জিলিয়ারী IOMMU পরিচালনার কাজগুলির জন্য দায়ী, যেমন পাওয়ার ম্যানেজমেন্ট, ইনিশিয়ালাইজেশন এবং যেখানে উপযুক্ত সেখানে হ্যান্ডলিং বাধা দেওয়া।

যাইহোক, হোস্টকে ডিভাইস স্টেটের নিয়ন্ত্রণে রাখলে IOMMU হার্ডওয়্যারের প্রোগ্রামিং ইন্টারফেসে অতিরিক্ত প্রয়োজনীয়তা থাকে যাতে অনুমতি চেক অন্য উপায়ে বাইপাস করা না যায়, উদাহরণস্বরূপ, ডিভাইস রিসেট করার পর।

আর্ম ডিভাইসগুলির জন্য একটি আদর্শ এবং ভালভাবে সমর্থিত IOMMU যা বিচ্ছিন্নতা এবং সরাসরি অ্যাসাইনমেন্ট উভয়ই সম্ভব করে তা হল আর্ম সিস্টেম মেমরি ম্যানেজমেন্ট ইউনিট (SMMU) আর্কিটেকচার। এই আর্কিটেকচার হল প্রস্তাবিত রেফারেন্স সমাধান।

স্মৃতির মালিকানা

বুট করার সময়, সমস্ত নন-হাইপারভাইজার মেমরি হোস্টের মালিকানাধীন বলে ধরে নেওয়া হয় এবং হাইপারভাইজার দ্বারা ট্র্যাক করা হয়। যখন একটি পিভিএম তৈরি করা হয়, তখন হোস্ট এটিকে বুট করার অনুমতি দেওয়ার জন্য মেমরি পৃষ্ঠাগুলি দান করে এবং হাইপারভাইজার সেই পৃষ্ঠাগুলির মালিকানা হোস্ট থেকে পিভিএম-এ স্থানান্তর করে। এইভাবে, হাইপারভাইজার হোস্টের পর্যায় 2 পৃষ্ঠার টেবিলে অ্যাক্সেস-নিয়ন্ত্রণ বিধিনিষেধ স্থাপন করে যাতে এটিকে আবার পৃষ্ঠাগুলিতে অ্যাক্সেস করা থেকে বাধা দেয়, অতিথিকে গোপনীয়তা প্রদান করে।

হোস্ট এবং অতিথিদের মধ্যে যোগাযোগ তাদের মধ্যে নিয়ন্ত্রিত মেমরি ভাগ করে নেওয়ার মাধ্যমে সম্ভব হয়। অতিথিদের একটি হাইপারকল ব্যবহার করে হোস্টের সাথে তাদের কিছু পৃষ্ঠা শেয়ার করার অনুমতি দেওয়া হয়, যা হাইপারভাইজারকে হোস্ট স্টেজ 2 পৃষ্ঠার টেবিলে সেই পৃষ্ঠাগুলি পুনরায় ম্যাপ করার নির্দেশ দেয়। একইভাবে, TrustZone-এর সাথে হোস্টের যোগাযোগ মেমরি শেয়ারিং এবং/অথবা ঋণদানের ক্রিয়াকলাপ দ্বারা সম্ভব হয়েছে, যার সবকটিই ফার্মওয়্যার ফ্রেমওয়ার্ক ফর আর্ম (FF-A) স্পেসিফিকেশন ব্যবহার করে pKVM দ্বারা নিবিড়ভাবে পর্যবেক্ষণ ও নিয়ন্ত্রিত হয়।

যেহেতু একটি পিভিএম-এর মেমরির প্রয়োজনীয়তা সময়ের সাথে সাথে পরিবর্তিত হতে পারে, তাই একটি হাইপারকল প্রদান করা হয় যা কলারের অন্তর্গত নির্দিষ্ট পৃষ্ঠাগুলির মালিকানা হোস্টের কাছে ফিরিয়ে দেওয়ার অনুমতি দেয়। অনুশীলনে এই হাইপারকলটি ভার্টিও বেলুন প্রোটোকলের সাথে ব্যবহার করা হয় যাতে ভিএমএম পিভিএম থেকে মেমরি ফেরত নেওয়ার অনুরোধ করতে পারে এবং পিভিএম একটি নিয়ন্ত্রিত পদ্ধতিতে ত্যাগ করা পৃষ্ঠাগুলির ভিএমএমকে অবহিত করার জন্য।

হাইপারভাইজার সিস্টেমের সমস্ত মেমরি পৃষ্ঠাগুলির মালিকানা ট্র্যাক করার জন্য দায়ী এবং সেগুলি শেয়ার করা হচ্ছে বা অন্য সংস্থাকে দেওয়া হচ্ছে কিনা। এই স্টেট ট্র্যাকিংয়ের বেশিরভাগই হোস্ট এবং গেস্টদের স্টেজ 2 পৃষ্ঠার টেবিলের সাথে সংযুক্ত মেটাডেটা ব্যবহার করে করা হয়, পৃষ্ঠা টেবিল এন্ট্রিতে (PTEs) সংরক্ষিত বিট ব্যবহার করে, যা তাদের নাম অনুসারে, সফ্টওয়্যার ব্যবহারের জন্য সংরক্ষিত।

হোস্টকে অবশ্যই নিশ্চিত করতে হবে যে এটি হাইপারভাইজার দ্বারা অ্যাক্সেসযোগ্য পৃষ্ঠাগুলি অ্যাক্সেস করার চেষ্টা করে না। একটি অবৈধ হোস্ট অ্যাক্সেস হাইপারভাইজার দ্বারা হোস্টে ইনজেকশনের জন্য একটি সিঙ্ক্রোনাস ব্যতিক্রম ঘটায়, যার ফলে হয় দায়ী ইউজারস্পেস টাস্কটি একটি SEGV সিগন্যাল গ্রহণ করতে পারে, বা হোস্ট কার্নেল বিপর্যস্ত হতে পারে। দুর্ঘটনাজনিত অ্যাক্সেস রোধ করতে, অতিথিদের দান করা পৃষ্ঠাগুলি হোস্ট কার্নেল দ্বারা অদলবদল বা একত্রিত করার জন্য অযোগ্য করে দেওয়া হয়।

হ্যান্ডলিং এবং টাইমার বাধা

কোনো গেস্ট ডিভাইসের সাথে যেভাবে ইন্টারঅ্যাক্ট করে এবং CPU-র মধ্যে যোগাযোগের জন্য ইন্টারপ্রসেসর ইন্টারাপ্ট (IPIs) হল প্রধান যোগাযোগ ব্যবস্থা। KVM মডেল হল EL1-এ হোস্টের কাছে সমস্ত ভার্চুয়াল ইন্টারাপ্ট ম্যানেজমেন্ট অর্পণ করা, যা সেই উদ্দেশ্যে হাইপারভাইজারের অবিশ্বস্ত অংশ হিসাবে আচরণ করে।

pKVM বিদ্যমান KVM কোডের উপর ভিত্তি করে একটি সম্পূর্ণ জেনেরিক ইন্টারাপ্ট কন্ট্রোলার সংস্করণ 3 (GICv3) এমুলেশন প্রদান করে। টাইমার এবং আইপিআইগুলি এই অবিশ্বস্ত এমুলেশন কোডের অংশ হিসাবে পরিচালনা করা হয়৷

GICv3 সমর্থন

EL1 এবং EL2-এর মধ্যে ইন্টারফেসটি অবশ্যই নিশ্চিত করতে হবে যে EL1 হোস্টের কাছে সম্পূর্ণ বিঘ্নিত অবস্থা দৃশ্যমান, যার মধ্যে বাধা সম্পর্কিত হাইপারভাইজার রেজিস্টারের কপি রয়েছে। এই দৃশ্যমানতা সাধারণত ভাগ করা মেমরি অঞ্চল ব্যবহার করে সম্পন্ন করা হয়, প্রতি ভার্চুয়াল CPU (vCPU)।

শুধুমাত্র সফ্টওয়্যার জেনারেটেড ইন্টারাপ্ট রেজিস্টার (এসজিআইআর) এবং ডিঅ্যাক্টিভেট ইন্টারাপ্ট রেজিস্টার (ডিআইআর) রেজিস্টার ট্র্যাপিংকে সমর্থন করার জন্য সিস্টেম রেজিস্টার রানটাইম সমর্থন কোড সরলীকৃত করা যেতে পারে। আর্কিটেকচার নির্দেশ করে যে এই রেজিস্টারগুলি সর্বদা EL2-এ আটকে থাকে, অন্য ফাঁদগুলি এখনও পর্যন্ত শুধুমাত্র ত্রুটি-বিচ্যুতি প্রশমিত করতে কার্যকর হয়েছে। বাকি সবকিছু হার্ডওয়্যারে পরিচালনা করা হচ্ছে।

MMIO এর দিকে, KVM-এ সমস্ত বর্তমান অবকাঠামো পুনঃব্যবহার করে, EL1-এ সবকিছু অনুকরণ করা হয়। অবশেষে, Wait for Interrupt (WFI) সর্বদা EL1-তে রিলে করা হয়, কারণ এটি কেভিএম ব্যবহার করে প্রাথমিক শিডিউলিংয়ের একটি।

টাইমার সমর্থন

ভার্চুয়াল টাইমারের জন্য তুলনাকারী মানটি অবশ্যই প্রতিটি ট্র্যাপিং WFI-এ EL1-এর সাথে প্রকাশ করা উচিত যাতে vCPU ব্লক থাকা অবস্থায় EL1 টাইমার ইন্টারাপ্ট ইনজেক্ট করতে পারে। শারীরিক টাইমার সম্পূর্ণরূপে অনুকরণ করা হয়, এবং সমস্ত ফাঁদ EL1 এ রিলে করা হয়।

MMIO হ্যান্ডলিং

ভার্চুয়াল মেশিন মনিটর (VMM) এর সাথে যোগাযোগ করতে এবং GIC ইমুলেশন সম্পাদন করতে, MMIO ফাঁদগুলিকে আরও ট্রাইজিংয়ের জন্য EL1-এ হোস্টের কাছে রিলে করতে হবে। pKVM এর জন্য নিম্নলিখিতগুলি প্রয়োজন:

  • IPA এবং অ্যাক্সেসের আকার
  • একটি লেখার ক্ষেত্রে ডেটা
  • ফাঁদে ফেলার বিন্দুতে CPU-এর অন্তিমতা

উপরন্তু, একটি উৎস/গন্তব্য হিসাবে একটি সাধারণ উদ্দেশ্য রেজিস্টার (জিপিআর) সহ ফাঁদগুলি একটি বিমূর্ত স্থানান্তর সিউডো-রেজিস্টার ব্যবহার করে রিলে করা হয়।

গেস্ট ইন্টারফেস

হাইপারকল এবং আটকে থাকা অঞ্চলে মেমরি অ্যাক্সেসের সংমিশ্রণ ব্যবহার করে একজন অতিথি সুরক্ষিত অতিথির সাথে যোগাযোগ করতে পারে। হাইপারকলগুলি SMCCC মান অনুসারে উন্মুক্ত করা হয়, KVM দ্বারা বিক্রেতার বরাদ্দের জন্য একটি পরিসীমা সংরক্ষিত। নিম্নলিখিত হাইপারকলগুলি pKVM গেস্টদের জন্য বিশেষ গুরুত্বপূর্ণ।

জেনেরিক হাইপারকল

  • PSCI অতিথিদের জন্য অনলাইনিং, অফলাইন এবং সিস্টেম শাটডাউন সহ তার vCPU-এর জীবনচক্র নিয়ন্ত্রণ করার জন্য একটি আদর্শ ব্যবস্থা প্রদান করে।
  • TRNG অতিথিদের জন্য pKVM থেকে এনট্রপির অনুরোধ করার জন্য একটি আদর্শ ব্যবস্থা প্রদান করে যা EL3 এ কল রিলে করে। এই পদ্ধতিটি বিশেষভাবে কার্যকর যেখানে হোস্টকে একটি হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটর (RNG) ভার্চুয়ালাইজ করার জন্য বিশ্বাস করা যায় না।

pKVM হাইপারকল

  • হোস্টের সাথে মেমরি শেয়ার করা। সমস্ত গেস্ট মেমরি প্রাথমিকভাবে হোস্টের কাছে অ্যাক্সেসযোগ্য নয়, তবে শেয়ার্ড-মেমরি যোগাযোগের জন্য এবং ভাগ করা বাফারগুলির উপর নির্ভরশীল প্যারাভার্চুয়ালাইজড ডিভাইসগুলির জন্য হোস্ট অ্যাক্সেস প্রয়োজনীয়। হোস্টের সাথে পৃষ্ঠাগুলি ভাগ করা এবং ভাগ করা বন্ধ করার জন্য হাইপারকলগুলি হ্যান্ডশেক করার প্রয়োজন ছাড়াই মেমরির কোন অংশগুলিকে অ্যান্ড্রয়েডের বাকি অংশগুলিতে অ্যাক্সেসযোগ্য করে দেওয়া হয়েছে তা ঠিক করতে দেয়৷
  • হোস্টের কাছে স্মৃতি বিসর্জন। সমস্ত গেস্ট মেমরি সাধারণত গেস্টের অন্তর্গত থাকে যতক্ষণ না এটি ধ্বংস হয়। এই অবস্থা দীর্ঘস্থায়ী VM-এর জন্য মেমরির প্রয়োজনীয়তাগুলির জন্য অপর্যাপ্ত হতে পারে যা সময়ের সাথে পরিবর্তিত হয়। relinquish হাইপারকল একজন অতিথিকে সুস্পষ্টভাবে পৃষ্ঠাগুলির মালিকানা হোস্টের কাছে হস্তান্তর করার অনুমতি দেয় গেস্ট অবসানের প্রয়োজন ছাড়াই।
  • হোস্টে মেমরি অ্যাক্সেস ট্র্যাপিং। প্রথাগতভাবে, যদি একজন KVM গেস্ট এমন একটি ঠিকানা অ্যাক্সেস করে যা একটি বৈধ মেমরি অঞ্চলের সাথে সঙ্গতিপূর্ণ নয়, তাহলে vCPU থ্রেড হোস্টে চলে যায় এবং অ্যাক্সেসটি সাধারণত MMIO-এর জন্য ব্যবহার করা হয় এবং ব্যবহারকারী স্পেসে VMM দ্বারা অনুকরণ করা হয়। এই হ্যান্ডলিং সহজতর করার জন্য, pKVM এর ঠিকানা, রেজিস্টার পরামিতি এবং সম্ভাব্য তাদের বিষয়বস্তু হোস্টের কাছে ফেরত দেওয়ার মতো ত্রুটিপূর্ণ নির্দেশ সম্পর্কে বিশদ বিজ্ঞাপন দিতে হবে, যা ফাঁদটি প্রত্যাশিত না হলে অনিচ্ছাকৃতভাবে সুরক্ষিত অতিথির কাছ থেকে সংবেদনশীল তথ্য প্রকাশ করতে পারে। pKVM এই ত্রুটিগুলিকে মারাত্মক হিসাবে বিবেচনা করে এই সমস্যার সমাধান করে যদি না গেস্ট ইতিপূর্বে একটি হাইপারকল জারি করে যাতে ত্রুটিযুক্ত IPA পরিসরটি হোস্টের কাছে ফেরত পেতে অনুমতি দেওয়া হয়। এই সমাধানটিকে MMIO গার্ড হিসাবে উল্লেখ করা হয়।

ভার্চুয়াল I/O ডিভাইস (virtio)

Virtio হল একটি জনপ্রিয়, পোর্টেবল, এবং প্যারাভার্চুয়ালাইজড ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি জনপ্রিয় মান। সুরক্ষিত গেস্টদের সংস্পর্শে আসা বেশিরভাগ ডিভাইস virtio ব্যবহার করে প্রয়োগ করা হয়। Virtio একটি সুরক্ষিত গেস্ট এবং বাকি অ্যান্ড্রয়েডের মধ্যে যোগাযোগের জন্য ব্যবহৃত vsock বাস্তবায়নকে আন্ডারপিন করে।

Virtio ডিভাইসগুলি সাধারণত VMM দ্বারা হোস্টের ইউজার স্পেসে প্রয়োগ করা হয়, যা গেস্ট থেকে virtio ডিভাইসের MMIO ইন্টারফেসে আটকে পড়া মেমরি অ্যাক্সেসকে বাধা দেয় এবং প্রত্যাশিত আচরণ অনুকরণ করে। MMIO অ্যাক্সেস তুলনামূলকভাবে ব্যয়বহুল কারণ ডিভাইসের প্রতিটি অ্যাক্সেসের জন্য VMM এবং পিছনে একটি রাউন্ড-ট্রিপ প্রয়োজন, তাই ডিভাইস এবং গেস্টের মধ্যে প্রকৃত ডেটা স্থানান্তর মেমরির একটি সেট ব্যবহার করে ঘটে। virtio-র একটি মূল অনুমান হল হোস্ট নির্বিচারে অতিথি মেমরি অ্যাক্সেস করতে পারে। এই অনুমানটি virtqueue-র ডিজাইনে স্পষ্ট, যেটিতে গেস্টের বাফারগুলির জন্য পয়েন্টার থাকতে পারে যে ডিভাইস এমুলেশন সরাসরি অ্যাক্সেস করার উদ্দেশ্যে।

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

ভার্চুয়াল ডিভাইস

চিত্র 4. Virtio ডিভাইস

TrustZone সঙ্গে মিথস্ক্রিয়া

যদিও অতিথিরা TrustZone এর সাথে সরাসরি যোগাযোগ করতে সক্ষম হয় না, তবুও হোস্টকে অবশ্যই নিরাপদ বিশ্বে SMC কল ইস্যু করতে সক্ষম হতে হবে। এই কলগুলি শারীরিকভাবে সম্বোধন করা মেমরি বাফারগুলি নির্দিষ্ট করতে পারে যা হোস্টের কাছে অ্যাক্সেসযোগ্য নয়। যেহেতু সুরক্ষিত সফ্টওয়্যারটি সাধারণত বাফারের অ্যাক্সেসিবিলিটি সম্পর্কে অজানা থাকে, তাই একটি দূষিত হোস্ট একটি বিভ্রান্ত ডেপুটি আক্রমণ (ডিএমএ আক্রমণের অনুরূপ) করতে এই বাফারটি ব্যবহার করতে পারে। এই ধরনের আক্রমণ প্রতিরোধ করার জন্য, pKVM সমস্ত হোস্ট এসএমসি কলকে EL2 এ আটকে রাখে এবং EL3 এ হোস্ট এবং সুরক্ষিত মনিটরের মধ্যে একটি প্রক্সি হিসাবে কাজ করে।

হোস্ট থেকে PSCI কলগুলি EL3 ফার্মওয়্যারে ন্যূনতম পরিবর্তন সহ ফরোয়ার্ড করা হয়। বিশেষভাবে, অনলাইনে আসা বা সাসপেন্ড থেকে পুনরায় শুরু হওয়া CPU-এর প্রবেশ বিন্দু পুনরায় লেখা হয় যাতে EL1-এ হোস্টে ফিরে আসার আগে পর্যায় 2 পৃষ্ঠার টেবিলটি EL2 এ ইনস্টল করা হয়। বুট করার সময়, এই সুরক্ষা pKVM দ্বারা প্রয়োগ করা হয়।

এই স্থাপত্যটি SoC সমর্থনকারী PSCI-এর উপর নির্ভর করে, বিশেষত TF-A এর EL3 ফার্মওয়্যার হিসাবে একটি আপ-টু-ডেট সংস্করণ ব্যবহারের মাধ্যমে।

ফার্মওয়্যার ফ্রেমওয়ার্ক ফর আর্ম (এফএফ-এ) স্বাভাবিক এবং নিরাপদ বিশ্বের মধ্যে মিথস্ক্রিয়াকে মানক করে তোলে, বিশেষ করে একটি সুরক্ষিত হাইপারভাইজারের উপস্থিতিতে। স্পেসিফিকেশনের একটি প্রধান অংশ একটি সাধারণ বার্তা বিন্যাস এবং অন্তর্নিহিত পৃষ্ঠাগুলির জন্য একটি সু-সংজ্ঞায়িত অনুমতি মডেল উভয় ব্যবহার করে, নিরাপদ বিশ্বের সাথে মেমরি ভাগ করে নেওয়ার জন্য একটি প্রক্রিয়া সংজ্ঞায়িত করে। pKVM প্রক্সি FF-A বার্তাগুলি নিশ্চিত করে যে হোস্ট নিরাপদ-সাইডের সাথে মেমরি শেয়ার করার চেষ্টা করছে না যার জন্য তার কাছে পর্যাপ্ত অনুমতি নেই।

এই আর্কিটেকচারটি মেমরি অ্যাক্সেস মডেলকে কার্যকর করার জন্য নিরাপদ বিশ্বের সফ্টওয়্যারের উপর নির্ভর করে, নিশ্চিত করার জন্য যে বিশ্বস্ত অ্যাপ এবং নিরাপদ বিশ্বে চলমান অন্য কোনো সফ্টওয়্যার মেমরি অ্যাক্সেস করতে পারে শুধুমাত্র তখনই যদি এটি একচেটিয়াভাবে সুরক্ষিত বিশ্বের মালিকানাধীন হয় বা FF ব্যবহার করে এটির সাথে স্পষ্টভাবে ভাগ করা হয়। -এ. S-EL2 সহ একটি সিস্টেমে, মেমরি অ্যাক্সেস মডেল প্রয়োগ করা একটি সিকিউর পার্টিশন ম্যানেজার কোর (SPMC) দ্বারা করা উচিত, যেমন Hafnium , যা সুরক্ষিত বিশ্বের জন্য স্টেজ 2 পৃষ্ঠার টেবিল বজায় রাখে। S-EL2 ছাড়া একটি সিস্টেমে, TEE পরিবর্তে তার স্টেজ 1 পৃষ্ঠা টেবিলের মাধ্যমে একটি মেমরি অ্যাক্সেস মডেল প্রয়োগ করতে পারে।

যদি EL2-তে করা SMC কলটি PSCI কল বা FF-A সংজ্ঞায়িত বার্তা না হয়, তবে আন-হ্যান্ডেল করা SMCগুলি EL3-এ ফরোয়ার্ড করা হয়। অনুমান হল যে (অবশ্যই বিশ্বস্ত) সুরক্ষিত ফার্মওয়্যার অ-হ্যান্ডেলড এসএমসিগুলিকে নিরাপদে পরিচালনা করতে পারে কারণ ফার্মওয়্যার pVM বিচ্ছিন্নতা বজায় রাখার জন্য প্রয়োজনীয় সতর্কতাগুলি বোঝে।

ভার্চুয়াল মেশিন মনিটর

crosvm হল একটি ভার্চুয়াল মেশিন মনিটর (VMM) যা Linux-এর KVM ইন্টারফেসের মাধ্যমে ভার্চুয়াল মেশিন চালায়। যা crosvm কে অনন্য করে তোলে তা হল হোস্ট কার্নেলকে রক্ষা করার জন্য রাস্ট প্রোগ্রামিং ভাষা এবং ভার্চুয়াল ডিভাইসগুলির চারপাশে একটি স্যান্ডবক্স ব্যবহার করে সুরক্ষার উপর এর ফোকাস। Crosvm সম্পর্কে আরও জানতে, এখানে এর অফিসিয়াল ডকুমেন্টেশন দেখুন।

ফাইল বর্ণনাকারী এবং ioctls

KVM /dev/kvm অক্ষর ডিভাইসটিকে ioctls সহ ব্যবহারকারীর স্থানে প্রকাশ করে যা KVM API তৈরি করে। ioctls নিম্নলিখিত বিভাগের অন্তর্গত:

  • সিস্টেম ioctls ক্যোয়ারী করে এবং গ্লোবাল অ্যাট্রিবিউট সেট করে যা সমগ্র কেভিএম সাবসিস্টেমকে প্রভাবিত করে এবং পিভিএম তৈরি করে।
  • VM ioctls ক্যোয়ারী করে এবং বৈশিষ্ট্যগুলি সেট করে যা ভার্চুয়াল CPUs (vCPUs) এবং ডিভাইসগুলি তৈরি করে এবং একটি সম্পূর্ণ pVM কে প্রভাবিত করে, যেমন মেমরি লেআউট এবং ভার্চুয়াল CPUs (vCPUs) এবং ডিভাইসগুলির সংখ্যা সহ।
  • vCPU ioctls ক্যোয়ারী করে এবং অ্যাট্রিবিউট সেট করে যা একটি একক ভার্চুয়াল CPU-এর অপারেশন নিয়ন্ত্রণ করে।
  • ডিভাইস ioctls ক্যোয়ারী করে এবং অ্যাট্রিবিউট সেট করে যা একটি একক ভার্চুয়াল ডিভাইসের অপারেশন নিয়ন্ত্রণ করে।

প্রতিটি crosvm প্রক্রিয়া একটি ভার্চুয়াল মেশিনের ঠিক একটি উদাহরণ চালায়। এই প্রক্রিয়াটি একটি VM ফাইল বর্ণনাকারী তৈরি করতে KVM_CREATE_VM সিস্টেম ioctl ব্যবহার করে যা pVM ioctls ইস্যু করতে ব্যবহার করা যেতে পারে। একটি VM FD-এ একটি KVM_CREATE_VCPU বা KVM_CREATE_DEVICE ioctl একটি vCPU/ডিভাইস তৈরি করে এবং নতুন সংস্থানকে নির্দেশ করে একটি ফাইল বর্ণনাকারী প্রদান করে। একটি vCPU বা ডিভাইস FD-এ ioctls ব্যবহার করা যেতে পারে একটি VM FD-এ ioctl ব্যবহার করে তৈরি করা ডিভাইস নিয়ন্ত্রণ করতে। vCPU-এর জন্য, এর মধ্যে গেস্ট কোড চালানোর গুরুত্বপূর্ণ কাজ রয়েছে।

অভ্যন্তরীণভাবে, crosvm এজ-ট্রিগার করা epoll ইন্টারফেস ব্যবহার করে কার্নেলের সাথে VM-এর ফাইল বর্ণনাকারী নিবন্ধন করে। যখনই কোনো ফাইল বর্ণনাকারীতে কোনো নতুন ইভেন্ট মুলতুবি থাকে তখন কার্নেল crosvm-কে অবহিত করে।

pKVM একটি নতুন ক্ষমতা যোগ করে, KVM_CAP_ARM_PROTECTED_VM , যা pVM পরিবেশ সম্পর্কে তথ্য পেতে এবং একটি VM-এর জন্য সুরক্ষিত মোড সেট আপ করতে ব্যবহার করা যেতে পারে। --protected-vm ফ্ল্যাগ পাস করা হলে, pVM ফার্মওয়্যারের জন্য উপযুক্ত পরিমাণ মেমরি অনুসন্ধান ও সংরক্ষণ করতে এবং তারপর সুরক্ষিত মোড সক্রিয় করতে crosvm এটি ব্যবহার করে।

মেমরি বরাদ্দ

একটি VMM এর প্রধান দায়িত্বগুলির মধ্যে একটি হল VM এর মেমরি বরাদ্দ করা এবং এর মেমরি লেআউট পরিচালনা করা। crosvm একটি স্থির মেমরি লেআউট তৈরি করে যা নীচের সারণীতে আলগাভাবে বর্ণিত হয়েছে।

স্বাভাবিক মোডে FDT PHYS_MEMORY_END - 0x200000
মুক্ত স্থান ...
রামডিস্ক ALIGN_UP(KERNEL_END, 0x1000000)
কার্নেল 0x80080000
বুটলোডার 0x80200000
BIOS মোডে FDT 0x80000000
শারীরিক মেমরি বেস 0x80000000
pVM ফার্মওয়্যার 0x7FE00000
ডিভাইস মেমরি 0x10000 - 0x40000000

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

নিয়মিত KVM-এর অধীনে, VMM সমস্ত গেস্ট মেমরিতে অ্যাক্সেস বজায় রাখে। pKVM-এর সাহায্যে, গেস্ট মেমরি হোস্ট ফিজিক্যাল অ্যাড্রেস স্পেস থেকে আনম্যাপ করা হয় যখন এটি গেস্টকে দান করা হয়। শুধুমাত্র ব্যতিক্রম হল মেমরি স্পষ্টভাবে গেস্ট দ্বারা শেয়ার করা, যেমন virtio ডিভাইসের জন্য।

অতিথির ঠিকানা স্থানের MMIO অঞ্চলগুলিকে ম্যাপ ছাড়াই রাখা হয়েছে৷ অতিথিদের দ্বারা এই অঞ্চলগুলিতে অ্যাক্সেস আটকে যায় এবং এর ফলে VM FD-তে একটি I/O ইভেন্ট হয়৷ এই প্রক্রিয়াটি ভার্চুয়াল ডিভাইসগুলি বাস্তবায়নের জন্য ব্যবহৃত হয়। সুরক্ষিত মোডে, অতিথিকে অবশ্যই স্বীকার করতে হবে যে তার ঠিকানা স্থানের একটি অঞ্চল MMIO-এর জন্য হাইপারকল ব্যবহার করে, দুর্ঘটনাজনিত তথ্য ফাঁসের ঝুঁকি কমাতে ব্যবহার করা হয়েছে।

সময়সূচী

প্রতিটি ভার্চুয়াল CPU একটি POSIX থ্রেড দ্বারা প্রতিনিধিত্ব করা হয় এবং হোস্ট লিনাক্স শিডিউলারের দ্বারা নির্ধারিত হয়। থ্রেডটি VCPU FD-তে KVM_RUN ioctl-কে কল করে, যার ফলে হাইপারভাইজার গেস্ট vCPU প্রসঙ্গে পরিবর্তন করে। হোস্ট শিডিউলার সংশ্লিষ্ট vCPU থ্রেড দ্বারা ব্যবহৃত সময় হিসাবে অতিথি প্রসঙ্গে ব্যয় করা সময়ের জন্য হিসাব করে। KVM_RUN রিটার্ন করে যখন এমন একটি ইভেন্ট থাকে যা VMM দ্বারা পরিচালনা করা আবশ্যক, যেমন I/O, ইন্টারাপ্টের সমাপ্তি, বা vCPU থামানো। VMM ইভেন্ট পরিচালনা করে এবং KVM_RUN আবার কল করে।

KVM_RUN এর সময়, থ্রেডটি হোস্ট শিডিউলারের দ্বারা পূর্বনির্ধারিত থাকে, EL2 হাইপারভাইজার কোড কার্যকর করা ব্যতীত, যা অগ্রিম নয়। গেস্ট pVM এর নিজেই এই আচরণ নিয়ন্ত্রণ করার জন্য কোন ব্যবস্থা নেই।

যেহেতু সমস্ত ভিসিপিইউ থ্রেড অন্য যেকোন ইউজারস্পেস টাস্কের মতো নির্ধারিত, সেগুলি সমস্ত স্ট্যান্ডার্ড QoS মেকানিজমের সাপেক্ষে। বিশেষভাবে, প্রতিটি vCPU থ্রেড ফিজিক্যাল CPU-তে সংযুক্ত করা যেতে পারে, cpusets-এ স্থাপন করা যেতে পারে, ব্যবহার ক্ল্যাম্পিং ব্যবহার করে বুস্ট করা বা ক্যাপ করা যেতে পারে, তাদের অগ্রাধিকার/শিডিউলিং নীতি পরিবর্তন করা যেতে পারে এবং আরও অনেক কিছু।

ভার্চুয়াল ডিভাইস

crosvm নিম্নলিখিত সহ বেশ কয়েকটি ডিভাইস সমর্থন করে:

  • কম্পোজিট ডিস্ক ইমেজের জন্য virtio-blk, শুধুমাত্র-পঠন বা রিড-রাইট
  • হোস্টের সাথে যোগাযোগের জন্য vhost-vsock
  • virtio-pci virtio পরিবহন হিসাবে
  • pl030 রিয়েল টাইম ঘড়ি (RTC)
  • সিরিয়াল যোগাযোগের জন্য 16550a UART

pVM ফার্মওয়্যার

pVM ফার্মওয়্যার (pvmfw) হল প্রথম কোড যা একটি pVM দ্বারা কার্যকর করা হয়, যা একটি ফিজিক্যাল ডিভাইসের বুট রমের মতো। pvmfw এর প্রাথমিক লক্ষ্য হল নিরাপদ বুট বুটস্ট্র্যাপ করা এবং pVM এর অনন্য গোপনীয়তা অর্জন করা। pvmfw কোনো নির্দিষ্ট OS, যেমন Microdroid এর সাথে ব্যবহার করার জন্য সীমাবদ্ধ নয়, যতক্ষণ না OS crosvm দ্বারা সমর্থিত এবং সঠিকভাবে স্বাক্ষর করা হয়েছে।

pvmfw বাইনারি একই নামের একটি ফ্ল্যাশ পার্টিশনে সংরক্ষণ করা হয় এবং OTA ব্যবহার করে আপডেট করা হয়।

ডিভাইস বুট

একটি pKVM-সক্ষম ডিভাইসের বুট পদ্ধতিতে নিম্নলিখিত ধাপগুলি যোগ করা হয়েছে:

  1. অ্যান্ড্রয়েড বুটলোডার (ABL) তার পার্টিশন থেকে মেমরিতে pvmfw লোড করে এবং ছবিটি যাচাই করে।
  2. ABL তার ডিভাইস আইডেন্টিফায়ার কম্পোজিশন ইঞ্জিন (DICE) গোপনীয়তা (কম্পাউন্ড ডিভাইস আইডেন্টিফায়ার (CDIs) এবং বুট সার্টিফিকেট চেইন (BCC)) একটি রুট অফ ট্রাস্ট থেকে পায়।
  3. ABL pvmfw's secrets (CDIs) এর পরিমাপ এবং DICE ডেরিভেশন করে এবং সেগুলিকে pvmfw বাইনারিতে যুক্ত করে।
  4. ABL DT-তে একটি linux,pkvm-guest-firmware-memory সংরক্ষিত মেমরি অঞ্চল নোড যোগ করে, pvmfw বাইনারির অবস্থান এবং আকার এবং পূর্ববর্তী ধাপে এটি থেকে উদ্ভূত গোপনীয়তা বর্ণনা করে।
  5. এবিএল লিনাক্সের হাতে নিয়ন্ত্রণ হস্তান্তর করে এবং লিনাক্স পিকেভিএম শুরু করে।
  6. pKVM হোস্টের স্টেজ 2 পৃষ্ঠার টেবিল থেকে pvmfw মেমরি অঞ্চল আনম্যাপ করে এবং ডিভাইস আপটাইম জুড়ে হোস্ট (এবং অতিথিদের) থেকে রক্ষা করে।

ডিভাইস বুট করার পরে, মাইক্রোড্রয়েড ডকুমেন্টের বুট সিকোয়েন্স বিভাগের ধাপ অনুযায়ী মাইক্রোড্রয়েড বুট করা হয়।

pVM বুট

একটি pVM তৈরি করার সময়, crosvm (অথবা অন্য VMM) একটি যথেষ্ট বড় মেমসলট তৈরি করতে হবে যাতে হাইপারভাইজার দ্বারা pvmfw ইমেজ তৈরি করা যায়। VMM এছাড়াও রেজিস্টারের তালিকায় সীমাবদ্ধ যার প্রাথমিক মান এটি সেট করতে পারে (প্রাথমিক vCPU-এর জন্য x0-x14, সেকেন্ডারি vCPU-এর জন্য কোনোটি নয়)। অবশিষ্ট রেজিস্টারগুলি সংরক্ষিত এবং হাইপারভাইজার-pvmfw ABI-এর অংশ।

যখন pVM চালানো হয়, হাইপারভাইজার প্রথমে প্রাথমিক vCPU-এর নিয়ন্ত্রণ pvmfw-এর হাতে দেয়। ফার্মওয়্যার আশা করে যে crosvm একটি AVB-স্বাক্ষরিত কার্নেল লোড করেছে, যা একটি বুটলোডার বা অন্য কোনো চিত্র হতে পারে এবং পরিচিত অফসেটে মেমরিতে একটি স্বাক্ষরবিহীন FDT হতে পারে। pvmfw AVB স্বাক্ষর যাচাই করে এবং সফল হলে, প্রাপ্ত FDT থেকে একটি বিশ্বস্ত ডিভাইস ট্রি তৈরি করে, মেমরি থেকে এর গোপনীয়তা মুছে দেয় এবং পেলোডের এন্ট্রি পয়েন্টে শাখাগুলিকে মুছে দেয়। যাচাইকরণের একটি ধাপ ব্যর্থ হলে, ফার্মওয়্যার একটি PSCI SYSTEM_RESET হাইপারকল ইস্যু করে।

বুটের মধ্যে, pVM ইনস্ট্যান্স সম্পর্কে তথ্য একটি পার্টিশনে (virtio-blk ডিভাইস) সংরক্ষণ করা হয় এবং pvmfw-এর সিক্রেট দিয়ে এনক্রিপ্ট করা হয় যাতে রিবুট করার পরে, সিক্রেটটি সঠিক ইনস্ট্যান্সে প্রভিশন করা হয়।