veritysetupの検証は成功しましたが、新しいカーネルにアップグレードした後にマウントに失敗しました。

veritysetupの検証は成功しましたが、新しいカーネルにアップグレードした後にマウントに失敗しました。

私たちはsquashfsルートファイルシステムにdm-verityを使用します。

カーネル4.8.4では、すべてがうまく動作します。カーネル4.14.14にアップグレードした後、コマンドがイメージをveritysetup verify確認してもインストールは失敗します。

# veritysetup verify /dev/mmcblk0p5 /dev/mmcblk0p6 --hash-offset 4096 d35f95a4
b47c92332fbcf5aced9c4ed58eb2d5115bad4aa52bd9d64cc0ee676b --debug
# cryptsetup 1.7.4 processing "veritysetup verify /dev/mmcblk0p5 /dev/mmcblk0p6 --hash-offset 4096 d35f95a4b47c92332fbcf5aced9c4ed58eb2d5115bad4aa52bd9d64cc0ee676b --debug"
# Running command verify.
# Allocating crypt device /dev/mmcblk0p6 context.
# Trying to open and read device /dev/mmcblk0p6 with direct-io.
# Initialising device-mapper backend library.
# Trying to load VERITY crypt type from device /dev/mmcblk0p6.
# Crypto backend (OpenSSL 1.0.2m  2 Nov 2017) initialized in cryptsetup library version 1.7.4.
# Detected kernel Linux 4.14.14-yocto-standard armv7l.
# Reading VERITY header of size 512 on device /dev/mmcblk0p6, offset 4096.
# Setting ciphertext data device to /dev/mmcblk0p5.
# Trying to open and read device /dev/mmcblk0p5 with direct-io.
# Activating volume [none] by volume key.
# Trying to activate VERITY device [none] using hash sha256.
# Verification of data in userspace required.
# Hash verification sha256, data device /dev/mmcblk0p5, data blocks 10462, hash_device /dev/mmcblk0p6, offset 2.
# Using 2 hash levels.
# Data device size required: 42852352 bytes.
# Hash device size required: 348160 bytes.
# Verification of data area succeeded.
# Verification of root hash succeeded.
# Releasing crypt device /dev/mmcblk0p6 context.
# Releasing device-mapper backend.
Command successful.


# veritysetup create vroot /dev/mmcblk0p5 /dev/mmcblk0p6 --hash-offset 4096 d3
5f95a4b47c92332fbcf5aced9c4ed58eb2d5115bad4aa52bd9d64cc0ee676b --debug

# mount -o ro /dev/mapper/vroot /mnt/
device-mapper: verity: 179:5: metadata block 2 is corrupted
EXT4-fs (dm-0): unable to read superblock
device-mapper: verity: 179:5: metadata block 2 is corrupted
EXT4-fs (dm-0): unable to read superblock
device-mapper: verity: 179:5: metadata block 2 is corrupted
EXT4-fs (dm-0): unable to read superblock
device-mapper: verity: 179:5: metadata block 2 is corrupted
SQUASHFS error: squashfs_read_data failed to read block 0x0
squashfs: SQUASHFS error: unable to read squashfs_super_block
device-mapper: verity: 179:5: metadata block 2 is corrupted
FAT-fs (dm-0): unable to read boot sector
mount: mounting /dev/mapper/vroot on /mnt/ failed: Input/output error

dmesgにも同じエラーメッセージが表示されます。上記のコマンドはターゲットデバイスで実行されます。

私の所有者Machine、Debian 8(カーネル3.16.0-5)、/dev/mmcblk0p5、および/dev/mmcblk0p6にあるファイルを使用して、すべてが機能するように設定できました。

# veritysetup create vroot rootfs-image.squashfs rootfs-image.hashtbl --hash-offset 4096 d35f95a4b47c92332fbcf5aced9c4ed58eb2d5115bad4aa52bd9d64cc0ee676b
# mount /dev/mapper/vroot /tmp/mnt

答え1

これにより、/proc/cryptosha256を提供する2つのモジュールがあることがわかりました。 1つはAtmelのモジュール、もう1つは汎用モジュールです。

name         : sha256
driver       : atmel-sha256
module       : kernel
priority     : 100
[...]
name         : sha256
driver       : sha256-generic
module       : kernel
priority     : 0

カーネルで Atmel SHA ハードウェアアクセラレータを無効にすると、CONFIG_CRYPTO_DEV_ATMEL_SHA=n一般的な実装が使用され、すべてが正常に動作します。

カーネル4.8.4からカーネル4.14.14に変更され、いくつかの問題が発生したようです。それはもう一つの質問です...

関連情報