親のページを子のページから保護する必要があります
- mmap で MAP_ANONYMOUS フラグと fd = -1 を指定して shm_open を使用しないようにしました。
- 基になるメモリを fchmod で保護しようとしました。
現在、次のセットアップを利用しています。
shm_unlink("/mymem");
int fd = shm_open("/mymem", O_RDWR | O_CREAT,0777);
printf("FD is :%d\n", fd);
ftruncate(fd, numberPages*getpagesize());
int *z = mmap(NULL, getpagesize()*numberPages, PROT_WRITE|PROT_READ, MAP_SHARED,fd,0);
printf("Memory is at : %p\n", z);
if(fork()){
printf("Protecting %d\n",mprotect(z, getpagesize(), PROT_NONE));
printf("(1)No issues, apparently\n");
sleep(2);
exit(1);
}else{
sleep(1);
*z = 3;
printf("(2)No issues, apparently\n");
sleep(5);
printf("Value of z: %d\n",*z);
}
親プロセスがページを読み書きできないように、子プロセスがページを保護できるようにする必要があります (mprotect などを使用)。
受信した出力は次のとおりです。
FD is :3
Memory is at : 0xf581a000
Protecting 0
(1)No issues, apparently
(2)No issues, apparently
Value of z: 3
行 *z = 3 でセグメンテーション違反が発生することを期待している (というか、望んでいる) 場合。
残念ながら、子は TCP サーバーとしても機能し、ページをブロックする要求は TCP 接続を介して受信されるため、この機能が必要です (私が考えていない別の方法がない限り?)。
何かアドバイス?