1e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng/*
2e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * Copyright (c) Crackerjack Project., 2007
3e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * Copyright (c) 2017 Fujitsu Ltd.
4e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng *
5e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * This program is free software; you can redistribute it and/or modify
6e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * it under the terms of the GNU General Public License as published by
7e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * the Free Software Foundation; either version 2 of the License, or
8e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * (at your option) any later version.
9e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng *
10e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * This program is distributed in the hope that it will be useful,
11e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * but WITHOUT ANY WARRANTY;  without even the implied warranty of
12e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * the GNU General Public License for more details.
14e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng *
15e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * You should have received a copy of the GNU General Public License
16e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * along with this program, if not, see <http://www.gnu.org/licenses/>.
17e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng */
18e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng
19da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis/*
20da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Description: This tests the keyctl() syscall
21da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis *		Manipulate the kernel's key management facility
22da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis *
23e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * Ported by Manas Kumar Nayak maknayak@in.ibm.com>
24e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng * Modified by Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
25da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis */
265c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
27da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper#include <errno.h>
28988aabfb05cbe808b5110eda4feab5a2ac8a7703Cyril Hrubis#include <stdint.h>
294e7726497211222385eaee5e7cf2968842702a46Garrett Cooper
30e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng#include "tst_test.h"
31e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng#include "lapi/keyctl.h"
325c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
33e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Fengstatic void do_test(void)
34354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
35e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	key_serial_t key;
36da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper
37974a9282b5bda74c221d0c998c949b1266e4efc5Guangwen Feng	TEST(keyctl(KEYCTL_GET_KEYRING_ID, KEY_SPEC_USER_SESSION_KEYRING));
38e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	if (TEST_RETURN != -1)
39e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		tst_res(TPASS, "KEYCTL_GET_KEYRING_ID succeeded");
40e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	else
41e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		tst_res(TFAIL | TTERRNO, "KEYCTL_GET_KEYRING_ID failed");
42faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
43e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	for (key = INT32_MAX; key > INT32_MIN; key--) {
44974a9282b5bda74c221d0c998c949b1266e4efc5Guangwen Feng		TEST(keyctl(KEYCTL_READ, key));
45e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		if (TEST_RETURN == -1 && TEST_ERRNO == ENOKEY)
46e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng			break;
47e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	}
485c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
49974a9282b5bda74c221d0c998c949b1266e4efc5Guangwen Feng	TEST(keyctl(KEYCTL_REVOKE, key));
50e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	if (TEST_RETURN != -1) {
51e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		tst_res(TFAIL, "KEYCTL_REVOKE succeeded unexpectedly");
52e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		return;
53e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	}
545c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
55e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	if (TEST_ERRNO != ENOKEY) {
56e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		tst_res(TFAIL | TTERRNO, "KEYCTL_REVOKE failed unexpectedly");
57e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng		return;
58faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	}
59e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng
60e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	tst_res(TPASS | TTERRNO, "KEYCTL_REVOKE failed as expected");
61e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper}
62e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng
63e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Fengstatic struct tst_test test = {
64e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng	.test_all = do_test,
65e3b515280339c3669ad38b7253cacb8d77e775f7Guangwen Feng};
66