
أمثلة التكامل لإصلاح CVE-2020-25860
يحتوي هذا المستودع على أمثلة لتبسيط دمج تحديث RAUC في المشاريع الحالية. يمكنك الاشتراك في https://github.com/rauc/rauc-1.5-integration/issues/1 لتلقي إشعارات بالتحديثات المهمة لهذا المستودع وبالدمج في أنظمة البناء الرئيسية (upstream).
الأمثلة مستمدة من الإصدارات الرئيسية الحالية، لذلك قد يلزم بعض التعديل اعتمادًا على عمر المشروع الحالي.
الاستشارة المقرر نشرها في 21 ديسمبر متاحة على https://github.com/rauc/rauc-1.5-integration/blob/master/CVE-2020-25860.md. سيتم أيضًا جعل هذا المستودع عامًا في تلك المرحلة.
إذا كان أرشيف rauc-1.5.tar.xz غير متاح للتنزيل بعد، فانسخ الأرشيف من هذا المستودع إلى دليل DL_DIR الخاص بك (يُعرَّف عادةً في ملف build/conf/local.conf).
انسخ الوصفة المحدّثة من oe_yocto/recipes-rauc-1.5/rauc/* إلى الطبقة الخاصة بالمشروع المناسبة، مع الحرص على الاحتفاظ بالتخصيصات الحالية (مثل system.conf أو ca.cert.pem).
انسخ oe_yocto/classes/verity_bundle.bbclass إلى دليل classes/ في هذه الطبقة (قد تحتاج إلى إنشاء هذا الدليل). هذه الفئة هي بديل عن bundle.bbclass من طبقة meta-rauc، مع دعم إضافي لإنشاء حزم بصيغة verity. يُستخدم الاسم المختلف لتجنب مشاكل ترتيب البحث عن الفئات.
إذا كنت ترغب في بناء حزم بصيغة verity، استخدم inherit verity_bundle بدلاً من inherit bundle في وصفة الحزمة الخاصة بك واضبط RAUC_BUNDLE_FORMAT = "verity" لتحديد الصيغة. مثال متاح في oe_yocto/recipes-rauc-1.5/bundles/core-bundle-minimal-verity.bb.
إذا كان أرشيف rauc-1.5.tar.xz غير متاح للتنزيل بعد، فانسخ الأرشيف من هذا المستودع إلى دليل مصدر PTXdist الخاص بك.
انسخ دليل ptxdist/rules/rauc.* إلى rules/ في BSP الخاص بك. ينتج عن ذلك ثنائية RAUC محدّثة للهدف وللمضيف.
إذا كنت تستخدم قاعدة حزمة RAUC الافتراضية من PTXdist، فانسخ ptxdist/config/images/rauc.config إلى config/images/ في BSP الخاص بك. يضبط قالب بيان الحزمة (manifest) المضمّن صيغة الحزمة plain، لذا غيّر ذلك حسب الحاجة.
إذا كنت تستخدم حزمة مخصصة وتريد التغيير إلى صيغة verity، فستحتاج إلى تحديث بيان الحزمة بنفسك.
إذا كان أرشيف rauc-1.5.tar.xz غير متاح للتنزيل بعد، فانسخ الأرشيف من هذا المستودع إلى دليل dl/rauc/ الخاص بك.
انسخ buildroot/package/rauc/rauc.* إلى package/rauc/ في نسخة Buildroot الخاصة بك. ينتج عن ذلك ثنائية RAUC محدّثة للهدف وللمضيف.
نظرًا لأن Buildroot لا يؤتمت بناء حزم التحديث، إذا كنت تريد استخدام صيغة حزمة verity، فستحتاج إلى تحديث بيان الحزمة يدويًا.
أزال RAUC الإصدار 1.3 (المنشور في 2020-04-23) الدعم لإصدارات OpenSSL الأقدم من 1.1.1، لأنها لم تعد مدعومة من مشروع OpenSSL:
إذا كان نظامك لا يزال يستخدم إصدارًا غير مدعوم من OpenSSL وكان تحديثه إلى 1.1.1 مع RAUC 1.5 غير ممكن، يتوفر تصحيح backport (0001-backport-to-OpenSSL-1.0.2.patch). لاحظ أن هذا التصحيح لا يتمتع بنفس نطاق الاختبار الذي يتمتع به إصدار 1.5.
في RAUC 1.5، يُستخدم استدعاء ioctl لجهاز الحلقة LOOP_SET_BLOCK_SIZE لضبط حجم الكتلة المنطقية على 4096 لتحسين الأداء.
عدم القدرة على تعيينه ليس أمرًا حرجًا ويتم ملاحظته فقط عبر رسالة بمستوى تصحيح (debug).
ولكن نظرًا لأن رمز LOOP_SET_BLOCK_SIZE غير موجود في إصدارات النواة الأقدم من 4.14، فإن الترجمة مع ملفات رؤوس النواة الأقدم ستفشل.
لحل ذلك، يجب تعريف الرمز اختياريًا في RAUC نفسه.
يتوفر تصحيح لهذا (0001-src-mount.c-fix-build-with-kernel-4.14.patch) (من https://github.com/rauc/rauc/pull/673).
سيكون الإصلاح أيضًا جزءًا من RAUC 1.5.1.