keyctl01.c revision faf0748216a2c3f2716131f0958ed34ea874d7e7
15c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
2faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Copyright (c) Crackerjack Project., 2007				   */
3faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
45c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* This program is free software;  you can redistribute it and/or modify      */
55c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* it under the terms of the GNU General Public License as published by       */
6faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* the Free Software Foundation; either version 2 of the License, or	  */
7faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* (at your option) any later version.					*/
8faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
9faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* This program is distributed in the hope that it will be useful,	    */
10faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* but WITHOUT ANY WARRANTY;  without even the implied warranty of	    */
11faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See		  */
12faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* the GNU General Public License for more details.			   */
13faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
14faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* You should have received a copy of the GNU General Public License	  */
15faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* along with this program;  if not, write to the Free Software	       */
165c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
17faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
185c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
195c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
20faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
21faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* File:	keyctl01.c				   		      */
22faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
23faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Description: This tests the keyctl() syscall				      */
24faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*		Manipulate the kernel's key management facility	       */
25faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Usage:  <for command-line>						 */
26faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* keyctl01 [-c n] [-e][-i n] [-I x] [-p x] [-t]		     	      */
27faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*      where,  -c n : Run n copies concurrently.			     */
28faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      -e   : Turn on errno logging.				 */
29faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      -i n : Execute test n times.				  */
30faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      -I x : Execute test for x seconds.			    */
31faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      -P x : Pause for x seconds between iterations.		*/
32faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      -t   : Turn on syscall timing.				*/
33faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
34faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Total Tests: 2							     */
35faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
36faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Test Name:   keyctl01					     	      */
37faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* History:     Porting from Crackerjack to LTP is done by		    */
38faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      Manas Kumar Nayak maknayak@in.ibm.com>			*/
395c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
405c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
415c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include <stdio.h>
425c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include <errno.h>
435c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include <linux/keyctl.h>
445c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Harness Specific Include Files. */
455c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "test.h"
465c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "usctest.h"
475c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "linux_syscall_numbers.h"
485c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
495c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Extern Global Variables */
50faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneyaextern int Tst_count;	/* counter for tst_xxx routines.	 */
51faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneyaextern char *TESTDIR;	/* temporary dir created by tst_tmpdir() */
525c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
535c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Global Variables */
54faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneyachar *TCID = "keyctl01";/* Test program identifier.*/
555c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modakint  testno;
56faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneyaint  TST_TOTAL = 2;	/* total number of tests in this file.   */
575c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
585c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Extern Global Functions */
595c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
60faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
61faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Function:    cleanup						       */
62faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
635c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Description: Performs all one time clean up for this test on successful    */
64faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      completion,  premature exit or  failure. Closes all temporary */
65faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      files, removes all temporary directories exits the test with  */
66faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      appropriate return code by calling tst_exit() function.       */
67faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
68faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Input:       None.							 */
69faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
70faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Output:      None.							 */
71faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
725c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
73faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      On success - Exits calling tst_exit(). With '0' return code.  */
74faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
755c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
765c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modakextern void cleanup() {
77faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* Remove tmp dir and all files in it */
78faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	TEST_CLEANUP;
79faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	tst_rmdir();
805c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
81faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* Exit with appropriate return code. */
82faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	tst_exit();
835c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak}
845c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
855c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Local  Functions */
865c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
87faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
88faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Function:    setup							 */
89faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
905c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/* Description: Performs all one time setup for this test. This function is   */
91faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      typically used to capture signals, create temporary dirs      */
92faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      and temporary files that may be used in the course of this    */
93faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      test.							 */
94faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
95faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Input:       None.							 */
96faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
97faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Output:      None.							 */
98faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
99faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/* Return:      On failure - Exits by calling cleanup().		      */
100faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*	      On success - returns 0.				       */
101faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya/*									    */
1025c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak/******************************************************************************/
1035c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modakvoid setup() {
104faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* Capture signals if any */
105faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* Create temporary directories */
106faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	TEST_PAUSE;
107faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	tst_tmpdir();
1085c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak}
1095c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
1105c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modakint main(int ac, char **av) {
111faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	int lc;		/* loop counter */
112faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	char *msg;	/* message returned from parse_opts */
113faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
114faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* parse standard options */
115faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
116faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
117faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		tst_exit();
118faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	}
119faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
120faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	setup();
121faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
122faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	/* Check looping state if -i option given */
123faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	for (lc = 0; TEST_LOOPING(lc); lc++) {
124faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
125faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		Tst_count = 0;
126faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
127faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		for (testno = 1; testno < TST_TOTAL; ++testno) {
1285c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
129faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			/* Call keyctl() and ask for a keyring's ID. */
130faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			TEST(syscall(__NR_keyctl, KEYCTL_GET_KEYRING_ID,
131faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya					KEY_SPEC_USER_SESSION_KEYRING));
132faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			if (TEST_RETURN != -1) {
133faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya				tst_resm(TPASS,"KEYCTL_GET_KEYRING_ID succeed");
134faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			} else {
135faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		 		tst_resm(TFAIL | TERRNO, "KEYCTL_GET_KEYRING_ID");
136faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			}
137faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
138faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			/* Call keyctl. */
139faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			TEST(syscall(__NR_keyctl, KEYCTL_REVOKE, "MyKey"));
140faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			if (TEST_RETURN != -1) {
141faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya				tst_resm(TFAIL | TERRNO, "KEYCTL_REVOKE succeeded unexpectly");
142faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		     	} else {
143faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya				/* Check for the correct error num. */
144faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya				if (TEST_ERRNO == ENOKEY) {
145faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya					tst_resm(TPASS | TERRNO,
146faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya						"KEYCTL_REVOKE got expected errno");
147faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya				} else {
148faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya					tst_resm(TFAIL | TERRNO,
149faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya						"KEYCTL_REVOKE got unexpected errno");
1505c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak				}
1515c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
152faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya			}
153faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
154faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya		}
1555c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak
156faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	}
157faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	cleanup();
158faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya	tst_exit();
159faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya
160faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya}
161