문서에 따르면 :-
shmflg에 SHM_RDONLY가 지정된 경우 세그먼트는 읽기 위해 연결되며 프로세스에는 세그먼트에 대한 읽기 권한이 있어야 합니다. 그렇지 않은 경우 세그먼트는 읽기 및 쓰기용으로 연결되며 프로세스에는 세그먼트에 대한 읽기 및 쓰기 권한이 있어야 합니다. 쓰기 전용 공유 메모리 세그먼트라는 개념은 없습니다.
따라서 여기서는 위의 명령문에 따라 공유 메모리에 대한 읽기 및 쓰기 액세스를 제공하는 0을 전달합니다.
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가 여기서 몇 가지 문제를 일으키는지 확실하지 않습니다.