文書によると: -
shmflgにSHM_RDONLYを指定した場合、セグメントは読み取り用に接続され、プロセスにはセグメントに対する読み取り権限が必要です。そうでない場合、セグメントは読み取りおよび書き込み用に接続され、プロセスにはセグメントに対する読み取りおよび書き込み権限が必要です。書き込み専用共有メモリセグメントという概念はありません。
したがって、ここでは、上記の文に従って共有メモリへの読み書きアクセスを提供するゼロを渡します。
ipcs出力:-
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x5304f6ab 98307 root 666 64 1
メモリに添付されたC ++コード
//Get shared memory for given shm_id
uint8_t* mem = (uint8_t *) shmat(_shm_id, NULL, 0);
if ((void *) mem == (void *) -1){
// in selinux enable system I am keep on coming here, mem is alway 0XFFFFFFF..
return -1;
}
奇妙なことは、shmat関数にSHM_RDONLYフラグを渡すと、共有メモリへのアクセス権を読み書きできるにもかかわらず、正しい共有メモリ位置を取得することです。
ここで唯一の違いは、メモリがルートによって作成され、他のユーザー(user1など)によって読み取られることです。しかし、666権限が与えられたので、これが問題になる可能性があるとは思わず、selinuxがここでいくつかの問題を引き起こしているかどうかはわかりません。