From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiao Yang Date: Thu, 22 Jun 2017 18:09:44 +0800 Subject: [LTP] [PATCH 3/3] syscalls/shmat03.c: add new regression test In-Reply-To: <59300056.1020107@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> Message-ID: <594B9768.8090108@cn.fujitsu.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it 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. 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 > > > >