
Linux सिस्टम पर सुरक्षा कमजोरियों को कम करने और कार्यात्मक समस्याओं के समाधान के लिए प्रोसेसर फ़र्मवेयर को अपडेट करने हेतु आधिकारिक Intel microcode डेटा फ़ाइलें।
इंटेल प्रोसेसर माइक्रोकोड अपडेट (MCU) पैकेज सुरक्षा सलाहकारों (security advisories) और कार्यात्मक मुद्दों, जिसमें एराटा (errata) शामिल है, के लिए अपडेट जारी करने की एक प्रणाली प्रदान करता है। इसके अलावा, MCU SGX एन्क्लेव शुरू करने (उन प्रोसेसरों पर जो SGX सुविधा का समर्थन करते हैं), जटिल व्यवहार (जैसे कि assists) लागू करने, और अधिक के लिए जिम्मेदार हैं। MCU लागू करने का पसंदीदा तरीका सिस्टम BIOS का उपयोग करना है। इंटेल के कुछ प्रोसेसरों के लिए, MCU को ऑपरेटिंग सिस्टम का उपयोग करके रनटाइम पर भी अपडेट किया जा सकता है। यहां साझा किया गया इंटेल माइक्रोकोड पैकेज उन प्रोसेसरों के लिए अपडेट शामिल करता है जो MCU के OS लोडिंग का समर्थन करते हैं।
अपने माइक्रोकोड को अपडेट करने से CPU में कुछ संभावित सुरक्षा कमजोरियों को कम करने में मदद मिल सकती है, साथ ही कुछ कार्यात्मक मुद्दों को भी संबोधित किया जा सकता है जो, उदाहरण के लिए, अप्रत्याशित सिस्टम व्यवहार जैसे हैंग, क्रैश, अप्रत्याशित रिबूट, डेटा त्रुटियाँ आदि उत्पन्न कर सकते हैं। इंटेल प्रोसेसर पर MCU लागू करने के बारे में अधिक जानने के लिए, माइक्रोकोड अपडेट गाइडेंस देखें।
यह पैकेज Linux वितरकों के लिए उनके OS रिलीज़ में शामिल करने हेतु प्रदान किया गया है। इंटेल OS विक्रेता अपडेट तंत्र का उपयोग करके नवीनतम MCU प्राप्त करने की अनुशंसा करता है। एक अच्छा प्रारंभिक बिंदु OS और सॉफ्टवेयर विक्रेता है। विशेषज्ञ उपयोगकर्ता OS विक्रेता तंत्र के बाहर सीधे अपने माइक्रोकोड को अपडेट कर सकते हैं। हालांकि, यह विधि जटिल है और गलत तरीके से किए जाने पर त्रुटियाँ उत्पन्न कर सकती है। ऐसी त्रुटियों में सिस्टम फ्रीज़, बूट करने में असमर्थता, प्रदर्शन प्रभाव, लॉजिकल प्रोसेसर द्वारा अलग-अलग अपडेट लोड करना, और कुछ अपडेट का प्रभावी न होना शामिल हो सकता है, लेकिन यह इन्हीं तक सीमित नहीं है। परिणामस्वरूप, यह विधि केवल विशेषज्ञ उपयोगकर्ताओं द्वारा ही आज़माई जानी चाहिए।
MCU को BIOS से लोड करना सबसे अच्छा होता है। कुछ MCU केवल BIOS से ही लागू किए जाने चाहिए। ऐसे MCU इस पैकेज में कभी शामिल नहीं किए जाते क्योंकि वे OS वितरण के लिए उपयुक्त नहीं होते। एक OEM को माइक्रोकोड अपडेट पैकेज प्राप्त हो सकते हैं जो BIOS में शामिल करने के लिए इस पैकेज में निहित सामग्री का एक सुपरसेट होते हैं।
OS विक्रेता एक ऐसा MCU प्रदान करना चुन सकते हैं जिसे कर्नेल प्रारंभिक लोडिंग (early loading) के लिए उपयोग कर सके। उदाहरण के लिए, Linux कर्नेल बूट अनुक्रम में बहुत प्रारंभ में ही MCU लागू कर सकता है। उन स्थितियों में जहां BIOS अपडेट उपलब्ध नहीं है, प्रारंभिक लोडिंग प्रोसेसर माइक्रोकोड को अपडेट करने का अगला सबसे अच्छा विकल्प है। पावर रीसेट पर माइक्रोकोड स्थितियाँ रीसेट हो जाती हैं, इसलिए बूट प्रक्रिया के दौरान हर बार MCU लोड करना आवश्यक है।
MCU लोड करने के लिए initrd विधि का उपयोग करने की अनुशंसा की जाती है क्योंकि यह विधि अधिकतम कवरेज के लिए सबसे प्रारंभिक समय पर MCU लोड करेगी। जो सिस्टम डाउनटाइम सहन नहीं कर सकते, वे बिना रिबूट के चल रहे सिस्टम को अपडेट करने के लिए लेट-लोड विधि का उपयोग कर सकते हैं।
प्रोसेसर सिग्नेचर एक संख्या है जो इंटेल प्रोसेसर के मॉडल और संस्करण की पहचान करती है। इसे CPUID instruction का उपयोग करके, lscpu कमांड के माध्यम से, या /proc/cpuinfo की सामग्री से प्राप्त किया जा सकता है। इसे आमतौर पर 3 फ़ील्ड के रूप में प्रस्तुत किया जाता है: फैमिली, मॉडल और स्टेपिंग।
उदाहरण के लिए, यदि कोई प्रोसेसर CPUID instruction से "0x000906eb" मान लौटाता है:
| आरक्षित | विस्तारित फैमिली | विस्तारित मॉडल | आरक्षित | प्रोसेसर प्रकार | फैमिली कोड | मॉडल संख्या | स्टेपिंग ID |
|---|---|---|---|---|---|---|---|
| 31:28 | 27:20 | 19:16 | 15:14 | 13:12 | 11:8 | 7:4 | 3:0 |
| xxxx | 00000000b | 1001b | xx | 00b | 0110b | 1110b | 1011b |
संबंधित Linux स्वरूपित फ़ाइल नाम "06-9e-0b" होगा, जहां:
एक प्रोसेसर को कई प्लेटफ़ॉर्म प्रकारों के लिए लागू किया जा सकता है। इंटेल प्रोसेसरों में MSR(17H) में 3-बिट प्लेटफ़ॉर्म ID फ़ील्ड होती है जो अधिकतम 8 प्रकारों के लिए प्लेटफ़ॉर्म प्रकार निर्दिष्ट करती है। किसी निर्दिष्ट प्रोसेसर मॉडल के लिए एक MCU फ़ाइल कई प्लेटफ़ॉर्म का समर्थन कर सकती है। MCU द्वारा समर्थित प्लेटफ़ॉर्म ID एक 8-बिट मास्क है जहां प्रत्येक सेट बिट एक प्लेटफ़ॉर्म प्रकार को इंगित करता है जिसे MCU समर्थन करता है। प्रोसेसर की प्लेटफ़ॉर्म ID को Linux में msr-tools से rdmsr का उपयोग करके पढ़ा जा सकता है।
intel-ucode निर्देशिका में family-model-stepping प्रारूप में नामित बाइनरी MCU फ़ाइलें होती हैं। यह फ़ाइल प्रारूप अधिकांश आधुनिक Linux वितरणों द्वारा समर्थित है। यह आमतौर पर /lib/firmware निर्देशिका में स्थित होती है और नीचे दिए गए लेट-लोड अपडेट निर्देशों का पालन करके माइक्रोकोड रीलोड इंटरफ़ेस के माध्यम से अपडेट की जा सकती है।
प्रारंभिक लोडिंग initrd को अपडेट करने के लिए, प्रारंभिक लोडिंग के लिए MCU फ़ाइलों को पैकेज करने के तरीके के बारे में अपने Linux वितरण से परामर्श करें। कुछ वितरण update-initramfs या dracut का उपयोग करते हैं। नीचे दी गई लेट-लोड प्रक्रिया को आज़माने से पहले यह सुनिश्चित करने के लिए OS विक्रेता की अनुशंसित विधि का उपयोग करें कि MCU फ़ाइल प्रारंभिक लोडिंग के लिए अपडेट की गई है।
intel-ucode पैकेज को सिस्टम में अपडेट करने के लिए:
/sys/devices/system/cpu/microcode/reload की उपस्थिति सुनिश्चित करें$ git clone https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files.git या$ wget https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/archive/main.zipintel-ucode निर्देशिका को /lib/firmware में कॉपी करें, /lib/firmware/intel-ucode/ में मौजूद फ़ाइलों को अधिलेखित करते हुए$ echo 1 > /sys/devices/system/cpu/microcode/reload$ sudo update-initramfs -u$ sudo reboot$ dmesg | grep microcode या$ cat /proc/cpuinfo | grep microcode | sort | uniqयदि आप MCU लागू करने के लिए OS विक्रेता विधि का उपयोग कर रहे हैं, तो उपरोक्त चरण अपडेट प्रक्रिया के दौरान स्वचालित रूप से किए जा सकते हैं।
intel-ucode-with-caveats निर्देशिका में ऐसे MCU शामिल हैं जिन्हें विशेष हैंडलिंग की आवश्यकता होती है। BDX-ML MCU इस निर्देशिका में प्रदान किया गया है क्योंकि इसे Linux कर्नेल में विशेष कमिट की आवश्यकता होती है, अन्यथा इसे अपडेट करने से अप्रत्याशित सिस्टम व्यवहार हो सकता है। OS विक्रेताओं को यह सुनिश्चित करना चाहिए कि लेट-लोडिंग के लिए BDX-ML MCU को पैकेज करने से पहले लेट लोडर पैच (linux-kernel-patches में प्रदान किए गए) वितरण में शामिल हों।
linux-kernel-patches निर्देशिका में कर्नेल पैच शामिल हैं जो MCU लागू करने से संबंधित विभिन्न मुद्दों को संबोधित करते हैं।