move test programs
This commit is contained in:
152
test/issues/840/C840.sh
Normal file
152
test/issues/840/C840.sh
Normal file
@ -0,0 +1,152 @@
|
||||
#!/bin/sh
|
||||
if ! sudo ls /sys/kernel/debug | grep kmemleak > /dev/null 2>&1; then
|
||||
echo kmemleak: not found >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 'C840T01... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
./mcexec ./C840T01
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T01: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if ! dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T01: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ! ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T01: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T01: OK
|
||||
fi
|
||||
|
||||
echo 'C840T02... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
./mcexec ./C840T02
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T02: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T02: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ! ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T02: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T02: OK
|
||||
fi
|
||||
|
||||
echo 'C840T03... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
./mcexec ./C840T03
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T03: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T03: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T03: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T03: OK
|
||||
fi
|
||||
|
||||
echo 'C840T04... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
timeout -s 9 2 ./mcexec ./C840T04
|
||||
sleep 2
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T04: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if ! dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T04: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ! ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T04: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T04: OK
|
||||
fi
|
||||
|
||||
echo 'C840T05... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
timeout -s 9 2 ./mcexec ./C840T05
|
||||
sleep 2
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T05: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T05: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ! ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T05: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T05: OK
|
||||
fi
|
||||
|
||||
echo 'C840T06... '
|
||||
ng=0
|
||||
sync
|
||||
sudo /sbin/sysctl vm.drop_caches=3 > /dev/null 2>&1
|
||||
./ihkosctl 0 clear_kmsg
|
||||
sudo dmesg -c > /dev/null
|
||||
sudo sh -c 'echo clear > /sys/kernel/debug/kmemleak'
|
||||
timeout -s 9 2 ./mcexec ./C840T06
|
||||
sleep 2
|
||||
if [ `sudo cat /sys/kernel/debug/kmemleak | wc -l` != 0 ]; then
|
||||
echo 'C840T06: NG (kmemleak)'
|
||||
ng=1
|
||||
fi
|
||||
if dmesg | grep 'remote_page_fault:interrupted. -512' > /dev/null 2>&1; then
|
||||
echo 'C840T06: WARN (remote_page_fault)'
|
||||
ng=1
|
||||
fi
|
||||
if ./ihkosctl 0 kmsg | grep 'is dead, terminate()' > /dev/null 2>&1; then
|
||||
echo 'C840T06: WARN (syscall offloading)'
|
||||
ng=1
|
||||
fi
|
||||
if [ $ng = 0 ]; then
|
||||
echo C840T06: OK
|
||||
fi
|
||||
28
test/issues/840/C840.txt
Normal file
28
test/issues/840/C840.txt
Normal file
@ -0,0 +1,28 @@
|
||||
スクリプトは Wed Jun 6 14:38:21 2018
|
||||
に開始しました[?1034hbash-4.2$ sh C840.sh
|
||||
C840T01...
|
||||
Terminate by signal 9
|
||||
C840.sh: 14 行: 22464 強制終了 ./mcexec ./C840T01
|
||||
C840T01: OK
|
||||
C840T02...
|
||||
Terminate by signal 9
|
||||
C840.sh: 38 行: 22500 強制終了 ./mcexec ./C840T02
|
||||
C840T02: OK
|
||||
C840T03...
|
||||
Terminate by signal 9
|
||||
C840.sh: 62 行: 22535 強制終了 ./mcexec ./C840T03
|
||||
C840T03: OK
|
||||
C840T04...
|
||||
C840.sh: 86 行: 22570 強制終了 timeout -s 9 2 ./mcexec ./C840T04
|
||||
C840T04: OK
|
||||
C840T05...
|
||||
C840.sh: 111 行: 22598 強制終了 timeout -s 9 2 ./mcexec ./C840T05
|
||||
C840T05: OK
|
||||
C840T06...
|
||||
C840.sh: 136 行: 22626 強制終了 timeout -s 9 2 ./mcexec ./C840T06
|
||||
C840T06: OK
|
||||
bash-4.2$ exit
|
||||
exit
|
||||
|
||||
スクリプトは Wed Jun 6 14:38:51 2018
|
||||
に終了しました
|
||||
46
test/issues/840/C840T01.c
Normal file
46
test/issues/840/C840T01.c
Normal file
@ -0,0 +1,46 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int fd;
|
||||
void *p;
|
||||
long l;
|
||||
pid_t pid;
|
||||
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
sleep(1);
|
||||
kill(getppid(), SIGKILL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
fd = open("rpf.data", O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("open(rpf.data)");
|
||||
exit(1);
|
||||
}
|
||||
p = mmap(NULL, 512*1024*1024, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
if (p == (void *)-1) {
|
||||
perror("mmap");
|
||||
exit(1);
|
||||
}
|
||||
close(fd);
|
||||
fd = open("rpf.out", O_WRONLY|O_CREAT|O_TRUNC, 0600);
|
||||
if (fd == -1) {
|
||||
perror("open(fpt.out)");
|
||||
exit(1);
|
||||
}
|
||||
l = write(fd, p, 512*1024*1024);
|
||||
printf("write=%ld\n", l);
|
||||
close(fd);
|
||||
munmap(p, 512*1024*1024);
|
||||
exit(0);
|
||||
}
|
||||
27
test/issues/840/C840T02.c
Normal file
27
test/issues/840/C840T02.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
pid_t pid;
|
||||
int pfd[2];
|
||||
char c;
|
||||
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
sleep(1);
|
||||
kill(getppid(), SIGKILL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
pipe(pfd);
|
||||
read(pfd[0], &c, 1);
|
||||
exit(0);
|
||||
}
|
||||
24
test/issues/840/C840T03.c
Normal file
24
test/issues/840/C840T03.c
Normal file
@ -0,0 +1,24 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
sleep(1);
|
||||
kill(getppid(), SIGKILL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
for(;;);
|
||||
exit(0);
|
||||
}
|
||||
38
test/issues/840/C840T04.c
Normal file
38
test/issues/840/C840T04.c
Normal file
@ -0,0 +1,38 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int fd;
|
||||
void *p;
|
||||
long l;
|
||||
|
||||
fd = open("rpf.data", O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("open(rpf.data)");
|
||||
exit(1);
|
||||
}
|
||||
p = mmap(NULL, 512*1024*1024, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
if (p == (void *)-1) {
|
||||
perror("mmap");
|
||||
exit(1);
|
||||
}
|
||||
close(fd);
|
||||
fd = open("rpf.out", O_WRONLY|O_CREAT|O_TRUNC, 0600);
|
||||
if (fd == -1) {
|
||||
perror("open(fpt.out)");
|
||||
exit(1);
|
||||
}
|
||||
l = write(fd, p, 512*1024*1024);
|
||||
printf("write=%ld\n", l);
|
||||
close(fd);
|
||||
munmap(p, 512*1024*1024);
|
||||
exit(0);
|
||||
}
|
||||
19
test/issues/840/C840T05.c
Normal file
19
test/issues/840/C840T05.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int pfd[2];
|
||||
char c;
|
||||
|
||||
pipe(pfd);
|
||||
read(pfd[0], &c, 1);
|
||||
exit(0);
|
||||
}
|
||||
15
test/issues/840/C840T06.c
Normal file
15
test/issues/840/C840T06.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
for(;;);
|
||||
exit(0);
|
||||
}
|
||||
587
test/issues/926/C926.c
Normal file
587
test/issues/926/C926.c
Normal file
@ -0,0 +1,587 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
pid_t pid1;
|
||||
pid_t pid2;
|
||||
pid_t pid3;
|
||||
int st;
|
||||
int p[2];
|
||||
int shmid;
|
||||
int *sp;
|
||||
key_t key;
|
||||
int valid1;
|
||||
int valid2;
|
||||
int valid3;
|
||||
char c;
|
||||
int result;
|
||||
struct shmid_ds buf;
|
||||
|
||||
key = ftok(argv[0], 0);
|
||||
|
||||
printf("C926T01... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 2;
|
||||
valid3 = 2;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
st = *sp == valid1? 1: 0;
|
||||
shmdt(sp);
|
||||
write(p[1], &c, 1);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 2
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
// step 3
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
// step 4
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T02... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 2;
|
||||
valid3 = 2;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
st = *sp == valid1? 1: 0;
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 2
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
// step 3
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
// step 4
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T03... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 1;
|
||||
valid3 = 1;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
shmctl(shmid, IPC_RMID, &buf);
|
||||
write(p[1], &c, 1);
|
||||
|
||||
// step3
|
||||
read(p[1], &c, 1);
|
||||
st = *sp == valid1? 1: 0;
|
||||
shmdt(sp);
|
||||
write(p[1], &c, 1);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 2
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
write(p[0], &c, 1);
|
||||
// step 4
|
||||
read(p[0], &c, 1);
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T04... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 1;
|
||||
valid3 = 1;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
shmctl(shmid, IPC_RMID, &buf);
|
||||
write(p[1], &c, 1);
|
||||
|
||||
// step4
|
||||
read(p[1], &c, 1);
|
||||
st = *sp == valid1? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 2
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
// step 3
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
write(p[0], &c, 1);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T05... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 1;
|
||||
valid3 = 1;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
shmctl(shmid, IPC_RMID, &buf);
|
||||
// step2
|
||||
st = *sp == valid1? 1: 0;
|
||||
shmdt(sp);
|
||||
write(p[1], &c, 1);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 3
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
// step 4
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T06... ");
|
||||
fflush(stdout);
|
||||
valid1 = 1;
|
||||
valid2 = 1;
|
||||
valid3 = 1;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
// step 1
|
||||
shmctl(shmid, IPC_RMID, &buf);
|
||||
// step2
|
||||
st = *sp == valid1? 1: 0;
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 3
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
// step 4
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T07... ");
|
||||
fflush(stdout);
|
||||
valid1 = 2;
|
||||
valid2 = 2;
|
||||
valid3 = 0;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
write(p[1], &c, 1);
|
||||
// step 2
|
||||
read(p[1], &c, 1);
|
||||
shmctl(shmid, IPC_RMID, &buf);
|
||||
// step2
|
||||
st = *sp == valid1? 1: 0;
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 1
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
write(p[0], &c, 1);
|
||||
// step 3
|
||||
read(p[0], &c, 1);
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
// step 4
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
printf("C926T08... ");
|
||||
fflush(stdout);
|
||||
valid1 = 2;
|
||||
valid2 = 2;
|
||||
valid3 = 2;
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((pid1 = fork()) == 0) {
|
||||
close(p[0]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 0
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
*sp = 1;
|
||||
write(p[1], &c, 1);
|
||||
// step 2
|
||||
read(p[1], &c, 1);
|
||||
// step2
|
||||
st = *sp == valid1? 1: 0;
|
||||
exit(st);
|
||||
}
|
||||
|
||||
if ((pid2 = fork()) == 0) {
|
||||
close(p[1]);
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
// step 1
|
||||
read(p[0], &c, 1);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
(*sp)++;
|
||||
write(p[0], &c, 1);
|
||||
// step 3
|
||||
read(p[0], &c, 1);
|
||||
st = *sp == valid2? 1: 0;
|
||||
shmdt(sp);
|
||||
// step 4
|
||||
exit(st);
|
||||
}
|
||||
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
result = 0;
|
||||
waitpid(pid1, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
waitpid(pid2, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if ((pid3 = fork()) == 0) {
|
||||
// step 5
|
||||
shmid = shmget(key, 4096, IPC_CREAT | 0660);
|
||||
sp = shmat(shmid, NULL, 0);
|
||||
st = *sp == valid3? 1: 0;
|
||||
shmdt(sp);
|
||||
exit(st);
|
||||
}
|
||||
|
||||
waitpid(pid3, &st, 0);
|
||||
if (WIFEXITED(st))
|
||||
result += WEXITSTATUS(st);
|
||||
|
||||
if (result == 3) {
|
||||
printf("OK\n");
|
||||
}
|
||||
else {
|
||||
printf("NG\n");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
15
test/issues/926/C926.txt
Normal file
15
test/issues/926/C926.txt
Normal file
@ -0,0 +1,15 @@
|
||||
スクリプトは Wed Jun 6 14:39:24 2018
|
||||
に開始しました[?1034hbash-4.2$ ./mcexec C[K./C926
|
||||
C926T01... OK
|
||||
C926T02... OK
|
||||
C926T03... OK
|
||||
C926T04... OK
|
||||
C926T05... OK
|
||||
C926T06... OK
|
||||
C926T07... OK
|
||||
C926T08... OK
|
||||
bash-4.2$ exit
|
||||
exit
|
||||
|
||||
スクリプトは Wed Jun 6 14:39:38 2018
|
||||
に終了しました
|
||||
Reference in New Issue
Block a user