
CVE-2020-25860 修正の統合例
このリポジトリには、既存のプロジェクトにRAUCアップデートを簡単に統合するためのサンプルが含まれています。 https://github.com/rauc/rauc-1.5-integration/issues/1 を購読すると、このリポジトリの重要な更新や、上位のビルドシステムへの統合に関する通知を受け取ることができます。
サンプルは現在の上流バージョンから派生したものであるため、既存のプロジェクトの古さによっては調整が必要になる場合があります。
12月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/ ディレクトリにコピーします(必要に応じてディレクトリを作成してください)。このクラスは、meta-raucレイヤの bundle.bbclass を置き換えるもので、verity 形式のバンドル作成をサポートします。名前が異なるのは、クラス検索順序の問題を避けるためです。
verity 形式でバンドルをビルドする場合は、バンドルレシピで inherit bundle の代わりに inherit verity_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.* ディレクトリを BSP 内の rules/ にコピーします。これにより、ターゲットとホスト用の更新されたRAUCバイナリが得られます。
PTXdist のデフォルトのRAUCバンドルルールを使用している場合は、ptxdist/config/images/rauc.config を BSP 内の config/images/ にコピーします。含まれているマニフェストテンプレートは plain バンドル形式を設定しているため、必要に応じて変更してください。
カスタムバンドルを使用していて、verity 形式に変更したい場合は、自分でマニフェストを更新する必要があります。
rauc-1.5.tar.xz アーカイブがまだダウンロード可能でない場合は、このリポジトリからアーカイブを dl/rauc/ ディレクトリにコピーします。
buildroot/package/rauc/rauc.* を Buildroot チェックアウト内の package/rauc/ にコピーします。これにより、ターゲットとホスト用の更新されたRAUCバイナリが得られます。
Buildroot はアップデートバンドルのビルドを自動化しないため、verity バンドル形式を使用する場合は、手動でマニフェストを更新する必要があります。
RAUC v1.3(2020-04-23 リリース)では、OpenSSL 1.1.1 より前のバージョンのサポートが削除されました。これらのバージョンは OpenSSL プロジェクトによってサポートされていなかったためです。
システムがまだサポートされていないバージョンの OpenSSL を使用しており、RAUC 1.5 とともに OpenSSL 1.1.1 への更新が不可能な場合は、バックポートパッチ(0001-backport-to-OpenSSL-1.0.2.patch)が利用可能です。このパッチは 1.5 リリースと同じ広範なテストを受けていないことに注意してください。
RAUC 1.5 では、パフォーマンス最適化のために論理ブロックサイズを 4096 に設定するため、ループデバイス ioctl LOOP_SET_BLOCK_SIZE を使用します。
設定できないことは重大ではなく、デバッグレベルのメッセージで通知されるだけです。
しかし、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 にも含まれる予定です。