Skip to content

Commit 12fabae

Browse files
robertosassuanakryiko
authored andcommitted
selftests/bpf: Fix IMA test
Commit 62622da ("ima: return IMA digest value only when IMA_COLLECTED flag is set") caused bpf_ima_inode_hash() to refuse to give non-fresh digests. IMA test #3 assumed the old behavior, that bpf_ima_inode_hash() still returned also non-fresh digests. Correct the test by accepting both cases. If the samples returned are 1, assume that the commit above is applied and that the returned digest is fresh. If the samples returned are 2, assume that the commit above is not applied, and check both the non-fresh and fresh digest. Fixes: 62622da ("ima: return IMA digest value only when IMA_COLLECTED flag is set") Reported-by: David Vernet <void@manifault.com> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Reviewed-by: Matt Bobrowski <mattbobrowski@google.com> Link: https://lore.kernel.org/bpf/20230308103713.1681200-1-roberto.sassu@huaweicloud.com
1 parent d1d51a6 commit 12fabae

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

tools/testing/selftests/bpf/prog_tests/test_ima.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void test_test_ima(void)
7070
u64 bin_true_sample;
7171
char cmd[256];
7272

73-
int err, duration = 0;
73+
int err, duration = 0, fresh_digest_idx = 0;
7474
struct ima *skel = NULL;
7575

7676
skel = ima__open_and_load();
@@ -129,7 +129,15 @@ void test_test_ima(void)
129129
/*
130130
* Test #3
131131
* - Goal: confirm that bpf_ima_inode_hash() returns a non-fresh digest
132-
* - Expected result: 2 samples (/bin/true: non-fresh, fresh)
132+
* - Expected result:
133+
* 1 sample (/bin/true: fresh) if commit 62622dab0a28 applied
134+
* 2 samples (/bin/true: non-fresh, fresh) if commit 62622dab0a28 is
135+
* not applied
136+
*
137+
* If commit 62622dab0a28 ("ima: return IMA digest value only when
138+
* IMA_COLLECTED flag is set") is applied, bpf_ima_inode_hash() refuses
139+
* to give a non-fresh digest, hence the correct result is 1 instead of
140+
* 2.
133141
*/
134142
test_init(skel->bss);
135143

@@ -144,13 +152,18 @@ void test_test_ima(void)
144152
goto close_clean;
145153

146154
err = ring_buffer__consume(ringbuf);
147-
ASSERT_EQ(err, 2, "num_samples_or_err");
148-
ASSERT_NEQ(ima_hash_from_bpf[0], 0, "ima_hash");
149-
ASSERT_NEQ(ima_hash_from_bpf[1], 0, "ima_hash");
150-
ASSERT_EQ(ima_hash_from_bpf[0], bin_true_sample, "sample_equal_or_err");
155+
ASSERT_GE(err, 1, "num_samples_or_err");
156+
if (err == 2) {
157+
ASSERT_NEQ(ima_hash_from_bpf[0], 0, "ima_hash");
158+
ASSERT_EQ(ima_hash_from_bpf[0], bin_true_sample,
159+
"sample_equal_or_err");
160+
fresh_digest_idx = 1;
161+
}
162+
163+
ASSERT_NEQ(ima_hash_from_bpf[fresh_digest_idx], 0, "ima_hash");
151164
/* IMA refreshed the digest. */
152-
ASSERT_NEQ(ima_hash_from_bpf[1], bin_true_sample,
153-
"sample_different_or_err");
165+
ASSERT_NEQ(ima_hash_from_bpf[fresh_digest_idx], bin_true_sample,
166+
"sample_equal_or_err");
154167

155168
/*
156169
* Test #4

0 commit comments

Comments
 (0)