From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiao Yang Date: Thu, 22 Jun 2017 19:08:03 +0800 Subject: [LTP] [PATCH 3/3] syscalls/shmat03.c: add new regression test In-Reply-To: <594B9768.8090108@cn.fujitsu.com> References: <1492164917-9329-1-git-send-email-yangx.jy@cn.fujitsu.com> <1492164917-9329-3-git-send-email-yangx.jy@cn.fujitsu.com> <20170529145709.GC6618@rei.lan> <59300056.1020107@cn.fujitsu.com> <594B9768.8090108@cn.fujitsu.com> Message-ID: <594BA513.5010705@cn.fujitsu.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: ltp@lists.linux.it On 2017/06/22 18:09, Xiao Yang wrote: > On 2017/06/01 19:53, Xiao Yang wrote: >> On 2017/05/29 22:57, Cyril Hrubis wrote: >>> Hi! >>>> + addr = shmat(shm_id, LOCATION, SHM_RND); >>>> + if (addr != (void *)-1) >>>> + tst_res(TINFO, "shmat() attached a nil-page unexpectedly"); >>>> + else >>>> + tst_res(TINFO, "shmat() didn't attach a nil-page"); >>>> + >>>> + ((char *)addr)[0] = 'A'; >>> >>> So if shmat() fails we try to write to (char*)-1 address, that does not >>> sound right. Why don't we exit the test with TPASS in that case and >>> skip >>> the part that tries to write to invalid address? >>> >>> Or at least dereference NULL here instead of the address returned from >>> shmat() since that is guaranteed to SEGFAULT. >> Hi Cyril >> >> I failed to call shmat() as root and returned EACCES if selinux is >> Enforcing. >> Do you know how to fix this problem? > Hi Cyril > > Sorry, I have fixed this issue, I will send v3 patch soon. Hi Cyril and jan Sorry, i tried to fix this issue, but failed. Could you help me to look into it? Thanks a lot! :-( shmat() only attached a nil-page as root when selinux is not Enforcing. Thanks, Xiao Yang. > > Thanks, > Xiao Yang. >> >> Thanks, >> Xiao Yang. >>>> + tst_res(TINFO, "shmat() wrote data to shmaddr:%p >>>> unexpectedly", addr); >>>> + >>>> + SAFE_SHMDT(addr); >>>> + >>>> + exit(0); >>>> +} >>>> + >>>> +static void do_shmat(unsigned int n) >>>> +{ >>>> + pid_t pid; >>>> + int status; >>>> + struct tcase *tc =&tcases[n]; >>>> + >>>> + pid = SAFE_FORK(); >>>> + if (!pid) >>>> + verify_shmat(tc->exp_usr); >>>> + >>>> + SAFE_WAITPID(pid,&status, 0); >>>> + >>>> + if (WIFEXITED(status)) { >>>> + tst_res(TFAIL, "%s mapped nil-page in shmat() unexpectedly", >>>> + tc->des); >>>> + return; >>>> + } >>>> + >>>> + if (WIFSIGNALED(status)&& WTERMSIG(status) == SIGSEGV) { >>>> + tst_res(TPASS, "%s didn't map nil-page in shmat(), and was " >>>> + "killed by %s as expected", tc->des, >>>> + tst_strsig(WTERMSIG(status))); >>>> + } else { >>>> + tst_res(TFAIL, "%s didn't map nil-page in shmat(), and was " >>>> + "killed by %s unexpectedly", tc->des, >>>> + tst_strsig(WTERMSIG(status))); >>>> + } >>>> +} >>>> + >>>> +static void setup(void) >>>> +{ >>>> + key_t shm_key; >>>> + >>>> + shm_key = GETIPCKEY(); >>>> + shm_id = SAFE_SHMGET(shm_key, 4096, 0777 | IPC_CREAT); >>>> +} >>>> + >>>> +static void cleanup(void) >>>> +{ >>>> + if (shm_id != -1) >>>> + SAFE_SHMCTL(shm_id, IPC_RMID, NULL); >>>> +} >>>> + >>>> +static struct tst_test test = { >>>> + .tid = "shmat03", >>>> + .needs_root = 1, >>>> + .forks_child = 1, >>>> + .test = do_shmat, >>>> + .tcnt = ARRAY_SIZE(tcases), >>>> + .setup = setup, >>>> + .cleanup = cleanup >>>> +}; >>>> -- >>>> 1.8.3.1 >>>> >>>> >>>> >>>> >>>> -- >>>> Mailing list info: https://lists.linux.it/listinfo/ltp >> >> >> >> > > > >