1d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew/* 2d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 3d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 4d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * This program is free software; you can redistribute it and/or modify it 5d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * under the terms of version 2 of the GNU General Public License as 6d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * published by the Free Software Foundation. 7d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 8d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * This program is distributed in the hope that it would be useful, but 9d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * WITHOUT ANY WARRANTY; without even the implied warranty of 10d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 12d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * You should have received a copy of the GNU General Public License along 13fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc., 14fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 15d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 16d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew */ 17d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew/********************************************************** 184bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 19d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * TEST IDENTIFIER : capget02 204bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 21d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * EXECUTED BY : anyone 224bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 23d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * TEST TITLE : Tests for error conditions. 244bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 25d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * TEST CASE TOTAL : 5 264bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 27d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com> 284bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 29d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * SIGNALS 30d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Uses SIGUSR1 to pause before test if option set. 31d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * (See the parse_opts(3) man page). 32d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 33d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * DESCRIPTION 34d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Verify that 35d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 1) capget() fails with errno set to EFAULT if an invalid address 36d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * is given for header 37d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 2) capget() fails with errno set to EFAULT if an invalid address 38d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * is given for data 39d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 3) capget() fails with errno set to EINVAL if an invalid value 40d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * is given for header->version 41d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 4) capget() fails with errno set to EINVAL if header->pid < 0 42d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 5) capget() fails with errno set to ESRCH if the process with 43d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * pid, header->pid does not exit 44bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak * 454bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 46d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Setup: 47d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Setup signal handling. 48d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Pause for SIGUSR1 if option specified. 494bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 50d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Test: 51d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Loop if the proper options are given. 52d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * call capget with proper arguments 53d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * if capget() fails with expected errno 54d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Test passed 55d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Otherwise 56d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Test failed 574bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 58d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Cleanup: 59d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * Print errno log and/or timing stats if options given 604bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 61d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * USAGE: <for command-line> 62d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * capget02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] 63d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * where, -c n : Run n copies concurrently. 64d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -e : Turn on errno logging. 65d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -h : Show help screen 66d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -f : Turn off functional testing 67d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -i n : Execute test n times. 68d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -I x : Execute test for x seconds. 69d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -p : Pause for SIGUSR1 before starting 70d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -P x : Pause for x seconds between iterations. 71d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * -t : Turn on syscall timing. 72d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * 73d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew ****************************************************************/ 74d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 75d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew#include <errno.h> 76d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew#include "test.h" 77817d8095fbfe5ebe22b29f58b7483f3d8d5e3fccRichard Palethorpe#include "lapi/syscalls.h" 78e775759cfee3c31a0c0cc1a3f33be0c4f7691aabrobbiew 79e775759cfee3c31a0c0cc1a3f33be0c4f7691aabrobbiew/**************************************************************************/ 80e775759cfee3c31a0c0cc1a3f33be0c4f7691aabrobbiew/* */ 81e775759cfee3c31a0c0cc1a3f33be0c4f7691aabrobbiew/* Some archs do not have the manpage documented sys/capability.h file, */ 8204a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew/* and require the use of the line below */ 8304a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew 8404a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew#include <linux/capability.h> 8504a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew 8604a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew/* If you are having issues with including this file and have the sys/ */ 8704a8ba521ab41fed9e2f000fca4efb05fb2ad7b1robbiew/* version, then you may want to try switching to it. -Robbie W. */ 88e775759cfee3c31a0c0cc1a3f33be0c4f7691aabrobbiew/**************************************************************************/ 89d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 90d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstatic void setup(); 91d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstatic void cleanup(); 92d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstatic void test_setup(int); 93d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 94fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "capget02"; 95d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 96d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstatic struct __user_cap_header_struct header; 97d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstatic struct __user_cap_data_struct data; 98d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 99d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewstruct test_case_t { 100d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew cap_user_header_t headerp; 101d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew cap_user_data_t datap; 102d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew int exp_errno; 103d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew char *errdesc; 104d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew} test_cases[] = { 1057ec19d9c95d491394401f8e2d88ec94f13f596dfvapier#ifndef UCLINUX 1067ec19d9c95d491394401f8e2d88ec94f13f596dfvapier /* Skip since uClinux does not implement memory protection */ 107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao { 108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (cap_user_header_t) - 1, &data, EFAULT, "EFAULT"}, { 109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &header, (cap_user_data_t) - 1, EFAULT, "EFAULT"}, 1107ec19d9c95d491394401f8e2d88ec94f13f596dfvapier#endif 111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao { 112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &header, &data, EINVAL, "EINVAL"}, { 113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &header, &data, EINVAL, "EINVAL"}, { 114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &header, &data, ESRCH, "ESRCH"} 115d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew}; 116d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 117d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiewint TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]); 118d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 11956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 120d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew{ 121d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 12289af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc, i; 123d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 124d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 125d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 126d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew setup(); 127d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 128d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew for (lc = 0; TEST_LOOPING(lc); lc++) { 129d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 130d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 131d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 132d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew for (i = 0; i < TST_TOTAL; ++i) { 133d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew test_setup(i); 134359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek TEST(ltp_syscall(__NR_capget, test_cases[i].headerp, 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao test_cases[i].datap)); 136d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 13717b121b3d967f4c137569d4ce9615c6a3679dcc9Garrett Cooper if (TEST_RETURN == -1 && 13817b121b3d967f4c137569d4ce9615c6a3679dcc9Garrett Cooper TEST_ERRNO == test_cases[i].exp_errno) { 139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TPASS | TTERRNO, 140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "capget failed as expected"); 141d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew } else { 142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TTERRNO, 143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "capget failed unexpectedly (%ld)", 144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao TEST_RETURN); 145d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew } 1464bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak } 1472c28215423293e443469a07ae7011135d058b671Garrett Cooper } 148d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 149d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew cleanup(); 150d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 15153740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper tst_exit(); 152d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 1532c28215423293e443469a07ae7011135d058b671Garrett Cooper} 154d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 155d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew/* setup() - performs all ONE TIME setup for this test */ 156c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void) 157d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew{ 1582c28215423293e443469a07ae7011135d058b671Garrett Cooper 159d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew tst_sig(NOFORK, DEF_HANDLER, cleanup); 160d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 161d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew TEST_PAUSE; 162d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 1632c28215423293e443469a07ae7011135d058b671Garrett Cooper} 164d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 165d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew/* 166d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew *cleanup() - performs all ONE TIME cleanup for this test at 167d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew * completion or premature exit. 168d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew */ 169c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void) 170d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew{ 1712c28215423293e443469a07ae7011135d058b671Garrett Cooper} 172d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 17356207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid test_setup(int i) 174d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew{ 1757ec19d9c95d491394401f8e2d88ec94f13f596dfvapier#ifdef UCLINUX 17656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak i = i + 2; 1777ec19d9c95d491394401f8e2d88ec94f13f596dfvapier#endif 178d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew switch (i) { 179d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew 18056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak case 0: 181d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew break; 18256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak case 1: 183d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.version = _LINUX_CAPABILITY_VERSION; 184d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.pid = getpid(); 185d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew break; 18656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak case 2: 187d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.version = 0; 188d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.pid = getpid(); 189d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew break; 19056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak case 3: 191d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.version = _LINUX_CAPABILITY_VERSION; 192d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.pid = -1; 193d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew break; 19456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak case 4: 195d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew header.version = _LINUX_CAPABILITY_VERSION; 19623b37f3e039c03ffee10b66f0df637340903577eStanislav Kholmanskikh header.pid = tst_get_unused_pid(cleanup); 197d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew break; 198d771da7926cda6ab04c6b5eb49b47cb5dbc5a6d2robbiew } 199ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 200