From: Mimi Zohar <zohar@linux.ibm.com>
To: Patrick Uiterwijk <patrick@puiterwijk.org>,
linux-integrity@vger.kernel.org
Cc: pbrobinson@redhat.com, Vitaly Chikunov <vt@altlinux.org>
Subject: Re: [PATCH ima-evm-utils v2 2/2] Add test for using sign_hash API
Date: Tue, 06 Jul 2021 11:53:09 -0400 [thread overview]
Message-ID: <2c6df7edf61d2e694a2bbba964c5a2ae81b2b3be.camel@linux.ibm.com> (raw)
In-Reply-To: <20210705154950.497359-3-patrick@puiterwijk.org>
Hi Patrick,
On Mon, 2021-07-05 at 17:49 +0200, Patrick Uiterwijk wrote:
> This adds a test with a small program that calls the sign_hash API, to
> ensure that that codepath works.
>
> Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
> Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
Somehow I missed that running the test without this patch the summary
"SKIP" info matches the "skipped" messages, but running with the patch
there's a discrepancy.
$ ./sign_verify.test &> /tmp/sign_verify.log
$ tail -5 /tmp/sign_verify.log
evmctl ima_sign failed properly with (1)
EVP_get_digestbyname(md_gost12_512) failed
errno: No such file or directory (2)
PASS: 127 SKIP: 20 FAIL: 0
$ grep "skipped" /tmp/sign_verify.log | wc -l
20
$ tail -5 /tmp/sign_verify.log-api
evmctl ima_sign: no detached signature md_gost12_512.txt~.sig
rm: cannot remove 'md_gost12_512.txt~': No such file or directory
PASS: 175 SKIP: 32 FAIL: 0
$ grep "skipped" /tmp/sign_verify.log-api | wc -l
30
> diff --git a/tests/sign_verify.apitest.c b/tests/sign_verify.apitest.c
> new file mode 100644
> index 0000000..3fcd043
> --- /dev/null
> +++ b/tests/sign_verify.apitest.c
> @@ -0,0 +1,55 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * sign_verify.apitest: Test program for verifying sign_hash
> + *
> + * Copyright (C) 2021 Patrick Uiterwijk <patrick@puiterwijk.org>
> + * Copyright (C) 2013,2014 Samsung Electronics
> + * Copyright (C) 2011,2012,2013 Intel Corporation
> + * Copyright (C) 2011 Nokia Corporation
> + */
As this is a new file and test, the copyrights other than your own are
unnecessary.
> +
> +#include <assert.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <sys/types.h>
> +#include <sys/xattr.h>
> +
> +#include "../src/imaevm.h"
> +#include "../src/utils.h"
> +
> +int main(int argc, char **argv)
> +{
> + unsigned char hash[MAX_DIGEST_SIZE];
> + unsigned char sig[MAX_SIGNATURE_SIZE];
> + int len, err;
> + char *file = argv[1];
> + char *key = argv[2];
> + char *algo = argv[3];
> + char *digest = argv[4];
> +
How about testing 'argc' before continuing?
> + len = strlen(digest) / 2;
> + if (hex2bin(hash, digest, len) != 0) {
> + fprintf(stderr, "Error during hex2bin\n");
> + return 1;
> + }
> +
> + len = sign_hash(algo, hash, len, key, NULL, sig + 1);
> + if (len <= 1) {
> + fprintf(stderr, "Error signing\n");
> + return 1;
> + }
> +
> + /* add header */
> + len++;
> + sig[0] = EVM_IMA_XATTR_DIGSIG;
> +
> + bin2file(file, "sig", sig, len);
> +
> + err = lsetxattr(file, "user.ima", sig, len, 0);
> + if (err < 0) {
> + log_err("setxattr failed: %s\n", file);
> + return 1;
> + }
> +
> + return 0;
> +}
> diff --git a/tests/sign_verify.test b/tests/sign_verify.test
> index 3d7aa51..6f92801 100755
> --- a/tests/sign_verify.test
> +++ b/tests/sign_verify.test
> @@ -125,12 +127,14 @@ _evmctl_sign() {
> # Run and test {ima_,}sign operation
> check_sign() {
> # Arguments are passed via global vars:
> - # TYPE (ima or evm),
> + # TYPE (ima, ima_api or evm),
Similarly TYPE should be updated in verify_sign as well.
thanks,
Mimi
> # KEY,
> # ALG (hash algo),
> # PREFIX (signature header prefix in hex),
> # OPTS (additional options for evmctl),
> # FILE (working file to sign).
> + [ "$TYPE" = ima_api ] && [[ "$OPTS" =~ --rsa ]] && return "$SKIP"
> +
> local "$@"
> local KEY=${KEY%.*}.key
> local FILE=${FILE:-$ALG.txt}
> @@ -268,6 +272,20 @@ sign_verify() {
> # Multiple files and some don't verify
> expect_fail check_verify FILE="/dev/null $file"
>
> + setfattr -x user.ima "$FILE"
> + rm "$FILE.sig"
> + fi
> +
> + TYPE=ima_api
> + if expect_pass check_sign; then
> +
> + # Normal verify with proper key should pass
> + expect_pass check_verify
> + expect_pass check_verify OPTS="--sigfile"
> +
> + # Multiple files and some don't verify
> + expect_fail check_verify FILE="/dev/null $file"
> +
> rm "$FILE.sig"
> fi
>
prev parent reply other threads:[~2021-07-06 15:53 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-06 9:43 [PATCH 0/2] ima-evm-utils: Fix use of sign_hash via API Patrick Uiterwijk
2021-01-06 9:43 ` [PATCH 1/2] Fix sign_hash not observing the hashalgo argument Patrick Uiterwijk
2021-01-07 12:24 ` Mimi Zohar
2021-01-07 13:08 ` Vitaly Chikunov
2021-01-07 13:15 ` Vitaly Chikunov
2021-01-07 14:55 ` Mimi Zohar
2021-01-07 15:13 ` Patrick Uiterwijk
2021-01-06 9:43 ` [PATCH 2/2] Add test for using sign_hash API Patrick Uiterwijk
2021-01-07 12:25 ` Mimi Zohar
2021-01-07 12:53 ` Vitaly Chikunov
2021-01-07 15:08 ` Patrick Uiterwijk
2021-07-05 15:49 ` [PATCH ima-evm-utils v2 0/2] Fix use of sign_hash via API Patrick Uiterwijk
2021-07-05 15:49 ` [PATCH ima-evm-utils v2 1/2] Fix sign_hash not observing the hashalgo argument Patrick Uiterwijk
2021-07-05 15:49 ` [PATCH ima-evm-utils v2 2/2] Add test for using sign_hash API Patrick Uiterwijk
2021-07-06 15:53 ` Mimi Zohar [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2c6df7edf61d2e694a2bbba964c5a2ae81b2b3be.camel@linux.ibm.com \
--to=zohar@linux.ibm.com \
--cc=linux-integrity@vger.kernel.org \
--cc=patrick@puiterwijk.org \
--cc=pbrobinson@redhat.com \
--cc=vt@altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox