keyctl01.c revision da7d01b0afd7b89edfca1fe0344d8d376f669b3a
1da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis/****************************************************************************** 2da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Copyright (c) Crackerjack Project., 2007 * 3da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * * 4da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * This program is free software; you can redistribute it and/or modify * 5da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * it under the terms of the GNU General Public License as published by * 6da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * the Free Software Foundation; either version 2 of the License, or * 7da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * (at your option) any later version. * 8da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * * 9da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * This program is distributed in the hope that it will be useful, * 10da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * but WITHOUT ANY WARRANTY; without even the implied warranty of * 11da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * 12da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * the GNU General Public License for more details. * 13da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * * 14da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * You should have received a copy of the GNU General Public License * 15da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * along with this program; if not, write to the Free Software Foundation, * 16da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 17da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * * 18da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis ******************************************************************************/ 19da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis/* 20da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Description: This tests the keyctl() syscall 21da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Manipulate the kernel's key management facility 22da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * 23da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * History: Porting from Crackerjack to LTP is done by 24da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis * Manas Kumar Nayak maknayak@in.ibm.com> 25da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis */ 265c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 27020a4da94272edfc2066bc6c36f7db33bea9e067Garrett Cooper#include "config.h" 286340c2a410a504efd154804f36910c5a8dabce6bGarrett Cooper#include <sys/types.h> 29e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#if HAVE_KEYCTL_SYSCALL 305c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include <linux/keyctl.h> 31e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#endif 32da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper#include <errno.h> 33e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#if HAVE_KEYCTL_SYSCALL 344e7726497211222385eaee5e7cf2968842702a46Garrett Cooper#include <keyutils.h> 35e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#endif 36da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper#include <limits.h> 37da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper#include <stdio.h> 384e7726497211222385eaee5e7cf2968842702a46Garrett Cooper 395c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "test.h" 405c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "usctest.h" 415c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak#include "linux_syscall_numbers.h" 425c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 43fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "keyctl01"; 44354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint testno; 45fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubisint TST_TOTAL = 2; 465c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 47e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#if HAVE_KEYCTL_SYSCALL 482c28215423293e443469a07ae7011135d058b671Garrett Cooper 49da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubisstatic void cleanup(void) 50da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis{ 51faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya TEST_CLEANUP; 52faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya tst_rmdir(); 535c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak} 545c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 55da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubisstatic void setup(void) 56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 57faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya TEST_PAUSE; 58faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya tst_tmpdir(); 595c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak} 605c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main(int ac, char **av) 62354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 63c2e8839e8801e0f01a6efb7d2cff10c86c5d55a4yaberauneya int ret; 6489af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 65da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper key_serial_t ne_key; 660b9589f3f9c0345b29cfcf7da5a1253c708303ebCyril Hrubis const char *msg; 67faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 68da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) 6960fa8014af7534eaefa901200c8df4b74ce422e6Garrett Cooper tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); 70faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 71faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya setup(); 72faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 73faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya for (lc = 0; TEST_LOOPING(lc); lc++) { 74faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 75d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 76faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 77faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya for (testno = 1; testno < TST_TOTAL; ++testno) { 78da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper 79faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya /* Call keyctl() and ask for a keyring's ID. */ 80359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek ret = ltp_syscall(__NR_keyctl, KEYCTL_GET_KEYRING_ID, 81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao KEY_SPEC_USER_SESSION_KEYRING); 82c2e8839e8801e0f01a6efb7d2cff10c86c5d55a4yaberauneya if (ret != -1) { 83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TPASS, 84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "KEYCTL_GET_KEYRING_ID succeeded"); 85faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } else { 86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TERRNO, 87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "KEYCTL_GET_KEYRING_ID"); 88da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper } 89da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (ne_key = INT32_MAX; ne_key > INT32_MIN; ne_key--) { 91359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek ret = ltp_syscall(__NR_keyctl, KEYCTL_READ, 92359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek ne_key); 93da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper if (ret == -1 && errno == ENOKEY) 94da908058635ca58caf3e85814f2eba68febad1e1Garrett Cooper break; 95faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } 96faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 97faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya /* Call keyctl. */ 98359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek ret = ltp_syscall(__NR_keyctl, KEYCTL_REVOKE, ne_key); 99c2e8839e8801e0f01a6efb7d2cff10c86c5d55a4yaberauneya if (ret != -1) { 100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TERRNO, 101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "KEYCTL_REVOKE succeeded unexpectedly"); 102c2e8839e8801e0f01a6efb7d2cff10c86c5d55a4yaberauneya } else { 103faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya /* Check for the correct error num. */ 104c2e8839e8801e0f01a6efb7d2cff10c86c5d55a4yaberauneya if (errno == ENOKEY) { 105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TPASS | TERRNO, 106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "KEYCTL_REVOKE got expected " 107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "errno"); 108faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } else { 109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TERRNO, 110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "KEYCTL_REVOKE got unexpected " 111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "errno"); 1125c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak } 1135c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 114faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } 115faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya 116faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } 1175c8fc01200ab5fedc1a1c4cb0989e6bfe1fc0c47subrata_modak 118faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya } 119faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya cleanup(); 120da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis tst_exit(); 121faf0748216a2c3f2716131f0958ed34ea874d7e7yaberauneya} 122e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper#else 123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main(void) 124e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper{ 125da7d01b0afd7b89edfca1fe0344d8d376f669b3aCyril Hrubis tst_brkm(TCONF, NULL, "keyctl syscall support not available on system"); 126e99ebbc091b9a6244864d5f80a4ae2e70f65a70dGarrett Cooper} 127ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman#endif 128