From: Eric Biggers <ebiggers@xxxxxxxxxx> In common/verity, add helper functions for dumping a file's fs-verity metadata using the new FS_IOC_READ_VERITY_METADATA ioctl. Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> --- common/verity | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/common/verity b/common/verity index 9a182240..38eea157 100644 --- a/common/verity +++ b/common/verity @@ -120,6 +120,27 @@ _restore_fsverity_signatures() fi } +# Require userspace and kernel support for 'fsverity dump_metadata'. +# $1 must be a file with fs-verity enabled. +_require_fsverity_dump_metadata() +{ + local verity_file=$1 + local tmpfile=$tmp.require_fsverity_dump_metadata + + if _fsv_dump_merkle_tree "$verity_file" 2>"$tmpfile" >/dev/null; then + return + fi + if grep -q "^ERROR: unrecognized command: 'dump_metadata'$" "$tmpfile" + then + _notrun "Missing 'fsverity dump_metadata' command" + fi + if grep -q "^ERROR: FS_IOC_READ_VERITY_METADATA failed on '.*': Inappropriate ioctl for device$" "$tmpfile" + then + _notrun "Kernel doesn't support FS_IOC_READ_VERITY_METADATA" + fi + _fail "Unexpected output from 'fsverity dump_metadata': $(<"$tmpfile")" +} + _scratch_mkfs_verity() { case $FSTYP in @@ -157,6 +178,21 @@ _fsv_scratch_begin_subtest() echo -e "\n# $msg" } +_fsv_dump_merkle_tree() +{ + $FSVERITY_PROG dump_metadata merkle_tree "$@" +} + +_fsv_dump_descriptor() +{ + $FSVERITY_PROG dump_metadata descriptor "$@" +} + +_fsv_dump_signature() +{ + $FSVERITY_PROG dump_metadata signature "$@" +} + _fsv_enable() { $FSVERITY_PROG enable "$@" -- 2.30.0