1 /* 2 * Copyright (c) International Business Machines Corp., 2001 3 * 07/2001 Ported by Wayne Boyer 4 * Copyright (c) 2016 Cyril Hrubis <chrubis (at) suse.cz> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14 * the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 /* 22 * Verify that root can provide a negative value to nice() 23 * and hence root can decrease the nice value of the process 24 * using nice() system call 25 */ 26 #include <unistd.h> 27 #include <errno.h> 28 #include <sys/resource.h> 29 #include "tst_test.h" 30 31 #define NICEINC -12 32 33 static void verify_nice(void) 34 { 35 int new_nice; 36 int orig_nice; 37 38 orig_nice = SAFE_GETPRIORITY(PRIO_PROCESS, 0); 39 40 TEST(nice(NICEINC)); 41 42 if (TEST_RETURN != (orig_nice + NICEINC)) { 43 tst_res(TFAIL | TTERRNO, "nice(%d) returned %li, expected %i", 44 NICEINC, TEST_RETURN, orig_nice + NICEINC); 45 return; 46 } 47 48 if (TEST_ERRNO) { 49 tst_res(TFAIL | TTERRNO, "nice(%d) failed", NICEINC); 50 return; 51 } 52 53 new_nice = SAFE_GETPRIORITY(PRIO_PROCESS, 0); 54 55 if (new_nice != (orig_nice + NICEINC)) { 56 tst_res(TFAIL, "Process priority %i, expected %i", 57 new_nice, orig_nice + NICEINC); 58 return; 59 } 60 61 tst_res(TPASS, "nice(%d) passed", NICEINC); 62 63 TEST(nice(-NICEINC)); 64 if (TEST_ERRNO) 65 tst_brk(TBROK | TERRNO, "nice(-NICEINC) failed"); 66 } 67 68 static struct tst_test test = { 69 .tid = "nice01", 70 .test_all = verify_nice, 71 .needs_root = 1, 72 }; 73