1/* 2 * Copyright (c) 2014 Fujitsu Ltd. 3 * Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com> 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it would be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 * 13 * You should have received a copy of the GNU General Public License along 14 * with this program. 15 */ 16/* 17 * DESCRIPTION 18 * Basic test for modify_ldt(2) using func=0 argument. 19 */ 20 21#include "config.h" 22#include "test.h" 23 24char *TCID = "modify_ldt03"; 25int TST_TOTAL = 1; 26 27#if defined(__i386__) && defined(HAVE_MODIFY_LDT) 28 29#ifdef HAVE_ASM_LDT_H 30# include <asm/ldt.h> 31#endif 32extern int modify_ldt(int, void *, unsigned long); 33 34#include <asm/unistd.h> 35#include <string.h> 36#include <sys/wait.h> 37#include <errno.h> 38#include "safe_macros.h" 39 40#ifdef HAVE_STRUCT_USER_DESC 41# define SIZE sizeof(struct user_desc) 42#else 43# define SIZE 16 44#endif 45 46static char buf[SIZE]; 47static void cleanup(void); 48static void setup(void); 49 50int main(int ac, char **av) 51{ 52 int lc; 53 54 tst_parse_opts(ac, av, NULL, NULL); 55 56 setup(); 57 58 for (lc = 0; TEST_LOOPING(lc); lc++) { 59 60 tst_count = 0; 61 62 TEST(modify_ldt(0, buf, SIZE)); 63 64 if (TEST_RETURN < 0) { 65 tst_resm(TFAIL | TTERRNO, 66 "modify_ldt() failed with errno: %s", 67 strerror(TEST_ERRNO)); 68 } else { 69 tst_resm(TPASS, "modify_ldt() tested success"); 70 } 71 } 72 73 cleanup(); 74 tst_exit(); 75} 76 77static void setup(void) 78{ 79 tst_sig(NOFORK, DEF_HANDLER, cleanup); 80 81 TEST_PAUSE; 82} 83 84static void cleanup(void) 85{ 86} 87 88#elif HAVE_MODIFY_LDT 89 90int main(void) 91{ 92 tst_brkm(TCONF, 93 NULL, "modify_ldt is available but not tested on the platform than " 94 "__i386__"); 95} 96 97#else /* if defined(__i386__) */ 98 99int main(void) 100{ 101 tst_resm(TINFO, "modify_ldt03 test only for ix86"); 102 tst_exit(); 103} 104 105#endif /* if defined(__i386__) */ 106