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